繁体   English   中英

如何创建具有特定颜色(而非黑色)的透明位图?

[英]How do you create transparent bitmap with a specific color (not black)?

透明像素由零的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);

到目前为止我尝试过的( redgreenblue不为零):

画布操作:

此功能与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));
    }
}

尝试添加到清单属性中的活动中:

android:hardwareAccelerated="false"

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM