Java BufferedImage getting red, green and blue individually

前端 未结 4 1289
时光取名叫无心
时光取名叫无心 2020-11-27 02:23

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

4条回答
  •  悲哀的现实
    2020-11-27 03:11

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

    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:

      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       }
    

提交回复
热议问题