Страница 1 из 1

SurfaceView Bitmap артефакты что делать?

Добавлено: 21 фев 2015, 19:49
Andrey902212
Добрый вечер люди. Изучая возможности SurfaceView, я сразу же столкнулся с проблемой. Облазил весь инет и справочники, такое чувство, что она только у меня одного. Дело вот в чем:
Подготовил я красивую PNG картинку, чтобы использовать как background для простенькой игры. Закинул в /res/drawable
Все стандартно.
Загрузка:

Код: Выделить всё

public class Pain extends SurfaceView implements SurfaceHolder.Callback {
Bitmap bg = (BitmapFactory.decodeResource(getResource(), R.drawable.bg));
.......
Отрисовка:

Код: Выделить всё

public void pain(Canvas c) {
c.drawBitmap(bg, x, y, null);
} 
Запускаю. Картинка выводится, но заметна потеря качества:
Изображение
Оригинал:
Изображение
Изображение 32 bit выводится в 16 bit формате. Почему так происходит я пока понять не могу. :( :(
LogCat говорит мне, что формат bitmap ARGB_8888. То есть сжатия(в ARGB_4444 или RGB_565) не происходило.. Куда тогда пропала информация о цвете?? Продолжаю эксперименты :geek: :geek: . Буду очень благодарен за помоощь.

Re: SurfaceView Bitmap артефакты что делать?

Добавлено: 22 фев 2015, 03:21
Andrey902212
На свой вопрос отвечу сам. После нескольких часов плясок с бубном и нервных перекуров решение было найдено :idea: :idea: :

Код: Выделить всё

public Pain (Context context) {
super(context);
getHolder().setFormat(PixelFormat.RGBA_8888); //установка формата пикселя!!
getHolder().addCallback(this);
}
вуаля. искомая глубина цвета. :lol:
Оказывается графика в surfaceview по умолчанию отображаются в формате RGBA_4444. Вот так вот..
В уроках об этом почему то всегда забывают упомянуть.

Re: SurfaceView Bitmap артефакты что делать?

Добавлено: 22 фев 2015, 12:02
Foenix
Ахаха,классное название класса :-D
"Как вы лодку назовете, так она и поплывет"

Re: SurfaceView Bitmap артефакты что делать?

Добавлено: 22 фев 2015, 18:49
Andrey902212
Да.:) Изначально он был Paint. Это такая самоирония.))

Re: SurfaceView Bitmap артефакты что делать?

Добавлено: 22 фев 2015, 18:53
Foenix
Срочно бери ник Врунгель :-)