canvas.drawBitmap () учитывает только альфа-слой, когда он равен 0 - PullRequest
4 голосов
/ 12 апреля 2011

Я загружаю ресурсы png с помощью BitmapFactory.decodeResource, а затем рисую их на Canvas, используя drawBitmap().

Я рисую разные слои по одному, чтобы прозрачные объекты перекрывали то, что они предполагалик, но когда у меня есть альфа-уровни в моих pngs, которые выше 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 && mInPlay) {
    if(mZone != null)
        canvas.drawBitmap(mTexture.getBitmap(),
                          mScreenX + mZone.getXOffset(), 
                          mScreenY + mZone.getYOffset(), null);
    else
        canvas.drawBitmap(mTexture.getBitmap(), mScreenX, mScreenY, null);
}

1 Ответ

0 голосов
/ 11 августа 2011

Вы пытались изменить формат вашего SurfaceView (если вы его используете) и / или вашего Window в соответствии с форматом (ARGB_8888) растрового изображения, которое вы используете? Это может помешать вам иметь настоящие эффекты прозрачности, и в любом случае вы должны попытаться согласовать ваши форматы окон / растровых изображений для лучшей производительности / качества .

Попробуйте Window.setFormat(PixelFormat.RGBA_8888); и SurfaceHolder.setFormat(PixelFormat.RGBA_8888;, чтобы установить формат пикселей.

...