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

Ответить
Andrey902212
Сообщения: 4
Зарегистрирован: 21 фев 2015, 18:20

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

Сообщение Andrey902212 » 21 фев 2015, 19:49

Добрый вечер люди. Изучая возможности 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: . Буду очень благодарен за помоощь.

Andrey902212
Сообщения: 4
Зарегистрирован: 21 фев 2015, 18:20

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

Сообщение Andrey902212 » 22 фев 2015, 03:21

На свой вопрос отвечу сам. После нескольких часов плясок с бубном и нервных перекуров решение было найдено :idea: :idea: :

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

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

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

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

Сообщение Foenix » 22 фев 2015, 12:02

Ахаха,классное название класса :-D
"Как вы лодку назовете, так она и поплывет"
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Andrey902212
Сообщения: 4
Зарегистрирован: 21 фев 2015, 18:20

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

Сообщение Andrey902212 » 22 фев 2015, 18:49

Да.:) Изначально он был Paint. Это такая самоирония.))

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

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

Сообщение Foenix » 22 фев 2015, 18:53

Срочно бери ник Врунгель :-)
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Ответить