当前位置: 首页 > 知识库问答 >
问题:

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

毋举
2023-03-14

透明像素由零的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的作用相同。模式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(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));
    }
}

我能做些什么来生成一个非黑色和透明的位图?或者它甚至是可能的(因为自动压缩)?

共有2个答案

姬念
2023-03-14

尝试将以下内容添加到清单属性中的活动:

android:hardwareAccelerated="false"

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

姬和豫
2023-03-14

在最后一次尝试中,尝试将红色、绿色和蓝色全部替换为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等效项。我需要一个图像类型(如,,…),该图像类型可以完全透明(alpha = 0)保留此颜色。当然还有一种将其保存为文件的方法。 问题答案: import java.awt.; import java.awt.image. ; 修改代码以使每个像素透明 来源:http://www.rgagnon.com/javadetails/java-0265.html

  • 问题内容: 我正在处理图像,并想确定一组像素是否更接近白色或黑色。 因此,给定一组 颜色/像素 ,如何确定它们接近白色还是黑色? 我尝试了一些笨拙的算法,有人知道我该怎么做吗? 问题答案: 我要说的是,您可以先将颜色转换为灰度,然后检查它是否更接近黑色或白色。 首先将RGB颜色值转换为通过以下公式计算亮度 然后检查该值是接近于0还是255,并相应地选择黑色或白色 请注意,如果未对颜色空间进行伽玛压

  • 在Canvas绘图时,可以通过绘制上下文的strokeStyle属性和fillStyle属性来设置图形的描边颜色和填充颜色。默认颜色为不透明的黑色。 strokeStyle属性和fillStyle属性可以被设置为任意有效的CSS颜色字符串,可以使用颜色名称、十六进制RGB颜色、RGB、RGBA、HSL、HSLA颜色中的任意一种。 在使用RGBA或HSLA颜色时,可以通过设置其透明度(alpha)来

  • 问题内容: 我正在读取BufferedImage中的像素颜色,如下所示: 现在,除了具有透明性的png之外,此方法都可以正常工作。我发现如果x,y指的是没有颜色的透明像素,我仍会读取一种颜色,通常与图像中其他位置使用的颜色相同。 如何检测像素实际上是透明的而不是彩色的? 谢谢 问题答案: 结果也是一个介于0(完全透明)到255(完全不透明)之间的值。

  • 我的目标是使特定的颜色在图像上透明,就像在游戏的平铺中一样,在加载时忽略一种普通的背景色。 我所读到的 我添加到默认值的代码。JAVA 使图像可变提供了更好的结果,但仍然没有从图像中减去。总体而言,在使用滤镜后,它似乎是作为整个图像上方的滤镜工作的,并且没有搜索我设置的颜色,因此颜色总是存在,并且不排除不取决于所使用的模式。 第二种选择 仅使用一个600x600 px png文件将应用程序加载时间

  • 我正在尝试将状态栏的颜色改为半透明的黑色(Android7.0),但我得到的只是一个灰色状态栏。每当我尝试将状态栏设置为透明或半透明时,我就会得到这种灰色。但纯色很好用。我使用的是折叠式工具栏布局,我知道我可以使用statusBarScrim,但这个功能也不起作用,我不知道为什么。 XML: 样式: 我也试过使用这些: