Android canvas.drawBitmap()仅在alpha层为0时使用
我正在使用Android canvas.drawBitmap()仅在alpha层为0时使用,android,alpha,Android,Alpha,我正在使用BitmapFactory.decodeResource加载png资源,然后使用drawBitmap()在画布上绘制它们 我一次画一个不同的层,这样透明的物体应该遮挡它们应该遮挡的东西,但是当我的PNG中的alpha级别高于0时,它们似乎会被忽略。alpha为0的位置不会被渲染,这是正确的,但是如果alpha小于255,而不是在该像素处将颜色与现有颜色混合,它只绘制颜色,而不进行任何alpha混合 如何在画布上绘制位图,并根据源图像的alpha通道进行适当的混合?相关代码片段如下所示:
BitmapFactory.decodeResource
加载png资源,然后使用drawBitmap()
在画布上绘制它们
我一次画一个不同的层,这样透明的物体应该遮挡它们应该遮挡的东西,但是当我的PNG中的alpha级别高于0时,它们似乎会被忽略。alpha为0的位置不会被渲染,这是正确的,但是如果alpha小于255,而不是在该像素处将颜色与现有颜色混合,它只绘制颜色,而不进行任何alpha混合
如何在画布上绘制位图,并根据源图像的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);
}
您是否尝试过更改SurfaceView
(如果您正在使用)和/或窗口的格式,以匹配您正在使用的位图的格式(ARGB_8888
)?这可能会妨碍您获得真正的透明度效果,在任何情况下,您都应该尝试
尝试Window.setFormat(PixelFormat.RGBA_8888)
和SurfaceHolder.setFormat(PixelFormat.rgba8888;
设置像素格式。您找到解决此问题的方法了吗?