Java BufferedImage分别获得红色,绿色和蓝色

getRGB方法返回一个int。 我怎样才能得到红色,绿色和蓝色的颜色都在0到255之间?

Java的Color类可以进行转换:

Color c = new Color(image.getRGB()); int red = c.getRed(); int green = c.getGreen(); int blue = c.getBlue(); 

像素由4字节(32位)整数表示,如下所示:

 00000000 00000000 00000000 11111111 ^ Alpha ^Red ^Green ^Blue 

所以,为了获得单个的颜色分量,你只需要一些二进制算术:

 int rgb = getRGB(...); int red = (rgb >> 16) & 0x000000FF; int green = (rgb >>8 ) & 0x000000FF; int blue = (rgb) & 0x000000FF; 

这确实是java.awt.Color类方法的作用:

  553 /** 554 * Returns the red component in the range 0-255 in the default sRGB 555 * space. 556 * @return the red component. 557 * @see #getRGB 558 */ 559 public int getRed() { 560 return (getRGB() >> 16) & 0xFF; 561 } 562 563 /** 564 * Returns the green component in the range 0-255 in the default sRGB 565 * space. 566 * @return the green component. 567 * @see #getRGB 568 */ 569 public int getGreen() { 570 return (getRGB() >> 8) & 0xFF; 571 } 572 573 /** 574 * Returns the blue component in the range 0-255 in the default sRGB 575 * space. 576 * @return the blue component. 577 * @see #getRGB 578 */ 579 public int getBlue() { 580 return (getRGB() >> 0) & 0xFF; 581 } 

你需要一些基本的二进制算术来分割它:

 int blue = rgb & 0xFF; int green = (rgb >> 8) & 0xFF; int red = (rgb >> 16) & 0xFF; 

(或者可能相反,我真的不记得,文件也没有给我一个即时的答案)

对于简单的颜色操作,您可以使用

 bufImg.getRaster().getPixel(x,y,outputChannels) 

outputChannels是一个用于存储获取像素的数组。 它的长度取决于图像的实际通道数。 例如,RGB图像有3个通道; RGBA图像有4个通道。

该方法有3种输出types:int,float和double。 要获得一个颜色值范围从0到255,你的实际参数outputChannels应该是一个int []数组。