Java - 将红绿蓝值转换为RGB颜色值的 getRGB 方法

3

通过使用 BufferedImage 对象调用 getRGB(int x, int y),可以得到一个单独的负数。

如何将三个不同的值(红色、绿色和蓝色)转换为这个单一的负数?


顺便说一下,每个BufferedImage都包含一个包含所有像素的数组。如果BufferedImage是TYPE_INT_RGB类型,则该数组将是int数组。因此,如果您要进行大量像素操作,则可以通过直接写入该数组来加快程序速度。您可以使用int [] pixels =((DataBufferInt)image.getRaster()。getDataBuffer())。getData()获取它。 - Tesseract
@Michu93 这个问题要求相反的内容,所以这不是一个重复的问题。 - Mark Rotteveel
3个回答

10

使用 Color 类:

new Color(r, g, b).getRGB()

这将使用比必要更多的资源。 - FThompson
@Vulcan:同意。但Color是开源的,因此OP可以“窃取”代码。 - JB Nizet
2
@JBNizet int rgb = (alpha << 24) | (red << 16) | (green << 8) | (blue << 0);int rgb =(alpha << 24)|(red << 16)|(green << 8)|(blue << 0); - FThompson

3

BufferedImage最终委托给java.awt.image.ColorModel,后者使用以下代码:

public int getRGB(Object inData) {
    return (getAlpha(inData) << 24)
        | (getRed(inData) << 16)
        | (getGreen(inData) << 8)
        | (getBlue(inData) << 0);
}

修改这个以适应你的需求是一件微不足道的练习。

-1

JB Nizet的回答很好,但是当创建数千个“Color”类型的新对象时,它可能会非常慢。最简单的方法是:

int rgb = (red << 16 | green << 8 | blue)

正如ByteBit所回答的那样


2
你偷了这个吗?哈哈 http://stackoverflow.com/questions/24594046/converting-red-green-and-blue-to-rgb/24596140#24596140 - ByteBit
抱歉没有引用你的答案。现在请看编辑。 - Zar E Ahmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接