canvas.drawBitmap()仅在alpha层为0时表示

时间:2011-04-12 05:14:06

标签: android alpha

我正在使用BitmapFactory.decodeResource加载png资源,然后使用CanvasdrawBitmap()上绘制它们。

我一次绘制一个不同的图层,以便透明对象遮挡它们应该的内容,但是当我的png中的alpha级别高于0时,它们似乎被忽略了。 alpha为0的地方不会被渲染,这是正确的,但是当alpha小于255而不是将颜色与该像素的现有颜色混合时,它只绘制它而不进行任何alpha混合。

如何在Canvas上根据源图像的alpha通道正确混合绘制位图?相关代码片段如下:

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 :(得分:0)

您是否尝试更改SurfaceView(如果使用的话)和/或Window的格式与您正在使用的位图的格式(ARGB_8888)相匹配?这可能会阻止您获得真正的透明效果,在任何情况下,您都应该尝试match up your window/bitmap formats for better performance/quality

尝试Window.setFormat(PixelFormat.RGBA_8888);SurfaceHolder.setFormat(PixelFormat.RGBA_8888;设置像素格式。