Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将RGB值转换为整数_Java_Bufferedimage - Fatal编程技术网

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);