如何在 Java 中将 getRGB(x,y) 整数像素转换为 Color(r,g,b,a)?
Posted
技术标签:
【中文标题】如何在 Java 中将 getRGB(x,y) 整数像素转换为 Color(r,g,b,a)?【英文标题】:How to convert getRGB(x,y) integer pixel to Color(r,g,b,a) in Java? 【发布时间】:2011-02-01 19:26:39 【问题描述】:我有从getRGB(x,y)
获得的整数像素,但我不知道如何将其转换为 RGBA 格式。例如,-16726016
应该是 Color(0,200,0,255)
。有什么建议吗?
【问题讨论】:
【参考方案1】:如果我猜对了,你得到的是一个0xAARRGGBB
形式的无符号整数,所以
int b = (argb)&0xFF;
int g = (argb>>8)&0xFF;
int r = (argb>>16)&0xFF;
int a = (argb>>24)&0xFF;
会提取颜色成分。但是,快速查看docs 说您可以这样做
Color c = new Color(argb);
或
Color c = new Color(argb, true);
如果您还想要 Color 中的 alpha 组件。
更新
红色和蓝色分量在原始答案中是相反的,所以正确答案是:
int r = (argb>>16)&0xFF;
int g = (argb>>8)&0xFF;
int b = (argb>>0)&0xFF;
也在第一段代码中更新
【讨论】:
@Gevorg:可能是。但这在测试代码时很明显。 :) @AKX 除非你用 (0,200,0,255) 测试它! ;) 根据docs.oracle.com/javase/7/docs/api/java/awt/…:24-31 位为 alpha,16-23 位为红色,8-15 位为绿色,0-7 位为蓝色【参考方案2】: Color c = new Color(-16726016, true);
System.out.println(c.getRed());
System.out.println(c.getGreen());
System.out.println(c.getBlue());
System.out.println(c.getAlpha());
打印出来:
0
200
0
255
你是这个意思吗?
【讨论】:
以上是关于如何在 Java 中将 getRGB(x,y) 整数像素转换为 Color(r,g,b,a)?的主要内容,如果未能解决你的问题,请参考以下文章