将RGB值转换为整数
因此,在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]) / 256 ) % 256 ); int b = (int) ((Math.pow(256,3) + rgbs[k]) % 256);
到目前为止,它的工作。
我需要做的是弄清楚如何获得一个整数,所以我可以使用BufferedImage.setRGB()
,因为它采用了它给我的相同types的数据。
我认为代码是这样的:
int rgb = red; rgb = (rgb << 8) + green; rgb = (rgb << 8) + blue;
另外,我相信你可以用下面的方法获得个人价值:
int red = (rgb >> 16) & 0xFF; int green = (rgb >> 8) & 0xFF; int blue = rgb & 0xFF;
int rgb = ((r&0x0ff)<<16)|((g&0x0ff)<<8)|(b&0x0ff);
如果你知道你的r,g和b值从不> 255或<0,你不需要&0x0ff
Additionaly
int red = (rgb>>16)&0x0ff; int green=(rgb>>8) &0x0ff; int blue= (rgb) &0x0ff;
不需要重复。
int rgb = new Color(r, g, b).getRGB();
如果r,g,b = 3个颜色的0到255之间的整数值
然后
rgb = 65536 * r + 256 * g + b;
单个rgb值是r,g,b的合成值,总计为16777216种可能的色调。
要获得单独的颜色值,您可以对像素(x,y)使用像Color一样的Color。
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();
以上将给你在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循环遍历图像。