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

标签 java android colors android-bitmap porter-duff

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

我现在想要创建一个完全透明的位图,但具有特定的颜色(例如白色)。但通过我尝试的每一种方法,我都会得到一个黑色的透明位图(就像在 png 文件中一样)。

这对我来说非常重要,因为我通过 Canvas 在位图上渲染抗锯齿文本。在角落,半透明像素变得更暗。我想要做的是预先用与文本相同的颜色填充位图或 Canvas ,但透明。

我的代码

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 均非零):

Canvas 操作:

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

关于java - 如何创建具有特定颜色(不是黑色)的透明位图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30407394/

相关文章:

Java 在初始化之前引用最终变量

java - 在一个数组中,是否至少有一个数字比另一个数组中的所有其他数字大?

android - 如何停止加速度计传感器

c# - Mono for Android,读取和写入 XLSX

java - android中从 "yyyy-MM-dd hh:mm:ss.SSS"----------> "hh:mm aa"解析日期和时间

java - 什么是 NullPointerException,我该如何解决?

java - Spring CriteriaBuilder 按名称搜索枚举

java - 如何使用java和opencv检测png文件中的颜色?

android - 使用 SpriteBatch 渲染图像时 ShapeRenderer 颜色停止工作

ios - 钛合金状态栏