Java颜色不透明度

Java颜色不透明度,java,colors,transparency,opacity,Java,Colors,Transparency,Opacity,我有一种方法可以根据某个值来确定颜色。方法如下: public Color color(double val) { double H = val * 0.3; double S = 0.9; double B = 0.9; return Color.getHSBColor((float)H, (float)S, (float)B); } 我还想使创建的颜色具有透明度。我该怎么做? 谢谢最简单的方法是使用此构造函数直接指定R、G、B和A: 我知道您有HSB

我有一种方法可以根据某个值来确定颜色。方法如下:

public Color color(double val) {
    double H = val * 0.3; 
    double S = 0.9; 
    double B = 0.9; 
    return Color.getHSBColor((float)H, (float)S, (float)B);
}
我还想使创建的颜色具有透明度。我该怎么做?
谢谢

最简单的方法是使用此构造函数直接指定R、G、B和A:

我知道您有HSB,但您可以很容易地使用。

使用带有alpha通道的值。具体来说,首先将颜色坐标转换为RGB空间:

int rgba = Color.HSBtoRGB(H, S, B);
然后添加所需的透明度

rgba = (rgba & 0xffffff) | (alpha << 24);

我知道这很旧,但当我想要用Java内置图形对象制作不透明时,我所做的就是
新颜色(RRR、GGG、BBB、AAA)

在上下文中使用:

g.setColor(new Color(255, 255, 255, 80));

最后一个值是alpha channel/opacity,数字越大表示透明度越低。

谢谢,但什么是rgba |=alpha?我刚刚意识到我误读了文档。我已经相应地编辑了我的答案。无论如何:传递给颜色构造函数的参数将四个字节组合成一个整数:蓝色、绿色、红色和alpha(透明度),按顺序排列。
HSBtoRGB
方法为您提供一个整数,其中红色、绿色和蓝色字节正确设置为所需颜色,但透明度字节将为零(完全透明)。要使颜色部分透明,需要将最后一个字节设置为所需的透明度
alpha&0xff
可以做到这一点。(续)事实上,更准确地说:
alpha&0xff
获取所需的透明度,然后将除最后8位之外的所有内容置零,
rgba |=…
使用OR操作将这些位放入整数中。对于我最初的(不正确的)代码,
假设alpha是0..255中的int,我认为您的原始代码是正确的,将alpha放入高阶字节:
rgba |=alphaHuh,谢谢。让我测试一下以确认,然后我会进行相应的编辑。jpo的回答中说明了这种方法的一部分,但到目前为止,你的方法是唯一一个提供了关于alpha高/低值意味着什么的关键信息的方法。我为此投了赞成票,但后来意识到这是错误的:较大的alpha值意味着颜色更不透明。我希望你能解决这个问题。数字越大意味着越不透明。
public Color color(double val) {
    double H = val * 0.3; 
    double S = 0.9; 
    double B = 0.9; 
    int rgb = Color.HSBtoRGB((float)H, (float)S, (float)B);
    int red = (rgb >> 16) & 0xFF;
    int green = (rgb >> 8) & 0xFF;
    int blue = rgb & 0xFF;
    Color color = new Color(red, green, blue, 0x33);
    return color;
}
g.setColor(new Color(255, 255, 255, 80));