如果有需要 设置上层不带alpha通道的bitmap的某种颜色为透明,从而显示被此颜色掩盖的下层那些像素的需求 的人可以参考一下我的方法,没有技术含量,但是可用。
下面是截取代码里的小段,原始的bitmap是通过自写文件头然后读取文件中的图像数据生成图片字节数组,再由BitmapFactory.decodeByteArray方法产生的(这个文件是由很多张RGB565的BMP图片去掉文件头后组成的),所以我这个bitmap没有alpha通道。
思路是通过此bitmap的copy方法创建一个可编辑的带通道bitmap,遍历需要透明处理的颜色,设置alpha通道为0,然后配合paint.setalpha就可以实现透明或者过滤效果了。
Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapbyte, 0, bitmapbyte.length, bmpFactoryOptions);//源图片
Bitmap bitmappic = bitmap.copy(Bitmap.Config.ARGB_8888 ,true);//isMutable = true;
int Width = bitmappic.getWidth();
int Height = bitmappic.getHeight();
int color;
for (int px=0;px<Width;px++){
for (int py=0;py<Height;py++){
color = bitmappic.getPixel(px,py);
if (color==0xfff800f8) bitmappic.setPixel(px, py, 0x00000000);//源图片copy操作之后我手动找了下,过滤色color值为0xf800f8
}
}
//
paint.setAlpha(250);//之后可以在可用的canvas里设置paint的alpha值,不要到255,高一点就好了
canvas.drawBitmap(bitmappic, 0, 0, paint);//如果背景有图片,就可以看到透明的效果了
可以看出,paint是配合bitmap的alpha通道来实现透明的。