Java 将RGB值转换为整数
因此,在Java 将RGB值转换为整数,java,bufferedimage,Java,Bufferedimage,因此,在缓冲区图像中,您将收到一个包含RGB值的整数。到目前为止,我使用以下方法从中获取RGB值: // rgbs is an array of integers, every single integer represents the // RGB values combined in some way int r = (int) ((Math.pow(256,3) + rgbs[k]) / 65536); int g = (int) (((Math.pow(256,3) + rgbs[k])
缓冲区图像中,您将收到一个包含RGB值的整数。到目前为止,我使用以下方法从中获取RGB值:
// rgbs is an array of integers, every single integer represents the
// RGB values combined in some way
int r = (int) ((Math.pow(256,3) + rgbs[k]) / 65536);
int g = (int) (((Math.pow(256,3) + rgbs[k]) / 256 ) % 256 );
int b = (int) ((Math.pow(256,3) + rgbs[k]) % 256);
到目前为止,它是有效的
我需要做的是找出如何得到一个整数,这样我就可以使用BufferedImage.setRGB()
,因为这需要它给我的相同类型的数据。我认为代码类似于:
int rgb = red;
rgb = (rgb << 8) + green;
rgb = (rgb << 8) + blue;
不需要倍增 如果每种颜色的r、g、b=3个从0到255的整数值 然后
单个rgb值是r、g、b的组合值,总共有16777216个可能的色度。要获得单个颜色值,您可以对像素(x,y)使用如下颜色
int rgb = new Color(r, g, b).getRGB();
上面给出的红色、绿色和蓝色的整数值范围为0到255
要从RGB设置值,您可以通过以下方式进行设置:
Color myColour = new Color(red, green, blue);
int rgb = myColour.getRGB();
//Change the pixel at (x,y) ti rgb value
image.setRGB(x, y, rgb);
请注意,以上更改了单个像素的值。因此,如果需要更改整个图像的值,则可能需要使用两个for循环对图像进行迭代 我认为在后两行不需要整数。第三行应该是“rgb=…”,对吗?它是一个整数。整数包含32位。前8位用于alpha值(为零)。下一个8表示红色,下一个8表示绿色,下一个8表示蓝色。试试看。如果最终输出等于初始输入,那么您就知道转换是正确的。呃,我认为这取决于颜色深度。您的示例在我看来像是24位颜色(每个通道8位)-这是
buffereImage
所期望的吗?是的,我假设缓冲图像的类型为buffereImage.type_INT_RGB。也许不是,这就是为什么使用另一个公式。在任何情况下,概念是(据我所知)移位位以获得单个值更容易,而不是使用发布的代码。我将其修改为rgb=0xFFFF*r+0xFF*g+b代码>用于可读性0xFF=255。必须为0x100。同样对于0xFFFFFFF,感谢您提供了这个简单但优雅的公式。。。拯救了我的一天:D
int red = (rgb>>16)&0x0ff;
int green=(rgb>>8) &0x0ff;
int blue= (rgb) &0x0ff;
rgb = 65536 * r + 256 * g + b;
int rgb = new Color(r, g, b).getRGB();
import java.awt.Color;
import java.awt.image.BufferedImage;
Color c = new Color(buffOriginalImage.getRGB(x,y));
int red = c.getRed();
int green = c.getGreen();
int blue = c.getBlue();
Color myColour = new Color(red, green, blue);
int rgb = myColour.getRGB();
//Change the pixel at (x,y) ti rgb value
image.setRGB(x, y, rgb);