#android #alpha
#Android #альфа
Вопрос:
Я загружаю ресурсы png с помощью BitmapFactory.decodeResource
, а затем рисую их на Canvas
с помощью drawBitmap()
.
Я рисую разные слои по одному, чтобы прозрачные объекты закрывали то, что им положено, но когда у меня в png-файлах альфа-уровни выше 0, они, похоже, игнорируются. Места, где альфа равна 0, не отображаются, что является правильным, но там, где альфа меньше 255, вместо смешивания цвета с существующим цветом в этом пикселе, он просто рисует его без какого-либо альфа-смешивания вообще.
Как я могу нарисовать растровое изображение на Canvas
с правильным смешиванием на основе альфа-канала исходных изображений? Далее следуют соответствующие фрагменты кода:
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inPreferredConfig = Config.ARGB_8888;
...
decorationTextures[1] = new
TextureStatic(BitmapFactory.decodeResource(resources, R.drawable.ice_1, opt));
decorationTextures[2] = new
TextureStatic(BitmapFactory.decodeResource(resources, R.drawable.ice_2, opt));
...
if(mTexture != null amp;amp; mInPlay) {
if(mZone != null)
canvas.drawBitmap(mTexture.getBitmap(),
mScreenX mZone.getXOffset(),
mScreenY mZone.getYOffset(), null);
else
canvas.drawBitmap(mTexture.getBitmap(), mScreenX, mScreenY, null);
}
Комментарии:
1. Вы нашли решение этой проблемы?
Ответ №1:
Вы пробовали изменять формат вашего SurfaceView
(если вы его используете) и / или вашего Window
, чтобы он соответствовал формату ( ARGB_8888
) используемого вами растрового изображения? Это может помешать вам получить настоящие эффекты прозрачности, и в любом случае вам следует попытаться согласовать форматы вашего окна / растрового изображения для повышения производительности / качества.
Попробуйте Window.setFormat(PixelFormat.RGBA_8888);
и SurfaceHolder.setFormat(PixelFormat.RGBA_8888;
установить формат пикселей.