如何创建具有特定颜色(不是黑色)的透明位图



一个透明像素由alpha值为0和任意值的红、绿、蓝组成。因此,即使像素是透明的,它仍然有颜色。

我现在想创建一个完全透明的位图,但是有一个特定的颜色(例如白色)。但是我尝试过的每一种方法都得到了一个黑色的透明位图(就像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, greenblue是非零的):

帆布操作:

这个和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));
    }
}

如何生成非黑色透明位图?或者这是可能的(因为自动压缩)?

尝试在最后一次尝试中将红色,绿色和蓝色全部替换为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));
    }
}

尝试在Manifest属性中添加您的活动:

android:hardwareAccelerated="false"

至少你会得到一些答案如果硬件加速删除透明位图

相关内容

  • 没有找到相关文章

最新更新