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

时间:2023-02-10 07:25:09

The getRGB method returns a single int. How can I get individually the red, green and blue colors all as values between 0 and 255?

getRGB方法返回单个int。如何将红色,绿色和蓝色单独作为0到255之间的值?

4 个解决方案

#1


70  

Java's Color class can do the conversion:

Java的Color类可以进行转换:

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

#2


109  

A pixel is represented by a 4-byte (32 bit) integer, like so:

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

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

So, to get the individual color components, you just need a bit of binary arithmetic:

因此,要获得各个颜色组件,您只需要一些二进制算术:

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

This is indeed what the java.awt.Color class methods do:

这确实是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       }

#3


8  

You'll need some basic binary arithmetic to split it up:

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

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

(Or possibly the other way round, I honestly can't remember and the documentation isn't giving me an instant answer)

(或者可能反过来说,老实说我记不清了,文档没有给我一个即时答案)

#4


6  

For simple color manipulations, you can use

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

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

The outputChannels is an array for storing the fetched pixel. Its length depends on your image's actual channel count. For example, an RGB image has 3 channels; and an RGBA image has 4 channels.

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

This method has 3 output types: int, float and double. To get a color value ranges from 0~255, your actual parameter outputChannels should be an int[] array.

此方法有3种输出类型:int,float和double。要获得颜色值范围为0~255,实际参数outputChannels应为int []数组。

#1


70  

Java's Color class can do the conversion:

Java的Color类可以进行转换:

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

#2


109  

A pixel is represented by a 4-byte (32 bit) integer, like so:

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

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

So, to get the individual color components, you just need a bit of binary arithmetic:

因此,要获得各个颜色组件,您只需要一些二进制算术:

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

This is indeed what the java.awt.Color class methods do:

这确实是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       }

#3


8  

You'll need some basic binary arithmetic to split it up:

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

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

(Or possibly the other way round, I honestly can't remember and the documentation isn't giving me an instant answer)

(或者可能反过来说,老实说我记不清了,文档没有给我一个即时答案)

#4


6  

For simple color manipulations, you can use

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

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

The outputChannels is an array for storing the fetched pixel. Its length depends on your image's actual channel count. For example, an RGB image has 3 channels; and an RGBA image has 4 channels.

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

This method has 3 output types: int, float and double. To get a color value ranges from 0~255, your actual parameter outputChannels should be an int[] array.

此方法有3种输出类型:int,float和double。要获得颜色值范围为0~255,实际参数outputChannels应为int []数组。