Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何创建具有特定颜色(非黑色)的透明位图?_Java_Android_Colors_Android Bitmap_Porter Duff - Fatal编程技术网

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

Java 如何创建具有特定颜色(非黑色)的透明位图?,java,android,colors,android-bitmap,porter-duff,Java,Android,Colors,Android Bitmap,Porter Duff,透明像素由零的alpha值和任意的红色、绿色和蓝色值组成。因此,即使像素是透明的,它仍然有颜色 我现在想创建一个完全透明的位图,但有一个特定的颜色(例如白色)。但我尝试的每一种方法都会得到一个透明的黑色位图(就像png文件一样) 这对我来说非常重要,因为我通过画布在位图上渲染抗锯齿文本。在拐角处,半透明像素变暗。我想做的是预先用与文本相同的颜色填充位图或画布,但要透明 我的代码 Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARG

透明像素由零的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);
到目前为止我所尝试的(
红色
绿色
蓝色
均为非零):

画布操作:

这一点与使用上的PorterDuff.Mode.SRC_时相同。我想
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(255, red, green, blue));
bitmap.eraseColor(Color.argb(0, red, green, blue));
位图操作:

这不会改变透明(黑色)位图上的任何内容

我尝试了这一行,希望第一行用我的颜色覆盖所有内容,第二行使其透明。但它提供了一个透明的黑色位图

paint.setColor(Color.argb(0, red, green, blue));
canvas.drawRect(0, 0, w, h, paint);
bitmap.eraseColor(Color.argb(255, red, green, blue));
bitmap.eraseColor(Color.argb(0, 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));
    }
}

for(int x=0;x在上一次尝试中,尝试将红色、绿色和蓝色全部替换为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));
    }
}

for(int x=0;x尝试将以下内容添加到清单属性中的活动中:

android:hardwareAccelerated="false"

如果硬件加速删除透明位图,至少你会得到一些答案,这是我实际尝试的。我仍然得到一个透明但黑色的位图。“白色”这只是一个例子。我写了红色、绿色和蓝色来强调我希望它能适用于所有颜色。你问这个问题已经有一段时间了,你可能还记得你最后做了什么吗?