透明像素由alpha值零和红色,绿色和蓝色的任意值组成。因此,即使像素是透明的,它仍然具有颜色。
我现在想要创建一个完全透明但具有特定颜色(例如白色)的位图。但是我尝试的每一种方法都会得到一个黑色透明的位图(就像在png文件中一样)。
这对我来说非常重要,因为我通过画布在位图上渲染消除锯齿的文本。在角落处,半透明像素变暗。我想要做的是事先用与文本相同的颜色填充位图或画布,但是透明。
我的代码
Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
//bitmap manipultion here
Canvas canvas = new Canvas(bitmap);
//canvas manipulation here
canvas.drawText(gText, 0, bounds.height(), paint);
到目前为止我尝试过的内容(red
,green
和blue
都是非零的):
画布操作:
这个与PorterDuff.Mode.SRC_OVER
相同。我以为SRC
用源alpha和源颜色覆盖目的地,或者我错了?
canvas.drawColor(Color.argb(0, red, green, blue), PorterDuff.Mode.SRC);
我也试过这个,但它会生成一个透明的黑色位图。
paint.setColor(Color.argb(0, red, green, blue));
canvas.drawRect(0, 0, w, h, paint);
位图操作:
这不会改变透明(黑色)位图上的任何内容
bitmap.eraseColor(Color.argb(0, red, green, blue));
我试过这个,希望第一行用我的颜色覆盖所有内容,第二行然后使其透明。但它提供了一个透明的黑色位图。
bitmap.eraseColor(Color.argb(255, red, green, blue));
bitmap.eraseColor(Color.argb(0, red, green, blue));
这个也会生成透明的黑色位图
for(int x = 0; x<bitmap.getWidth(); x++){
for(int y = 0; y<bitmap.getHeight(); y++){
bitmap.setPixel(x, y, Color.argb(0, red, green, blue));
}
}
如何生成非黑色透明位图?或者甚至可能(因为自动压缩)?
答案 0 :(得分:0)
尝试将上次尝试中的红绿色和蓝色全部替换为255,这应该加起来为白色(红色+绿色+蓝色==白色,255是最大值。
for(int x = 0; x<bitmap.getWidth(); x++){
for(int y = 0; y<bitmap.getHeight(); y++){
bitmap.setPixel(x, y, Color.argb(0, 255, 255, 255));
}
}
答案 1 :(得分:0)
尝试在Manifest attr中添加您的活动:
android:hardwareAccelerated="false"
如果硬件加速删除透明位图,至少你会得到一些答案