该getRGB()
方法返回单个 int。如何将红色、绿色和蓝色分别作为 0 到 255 之间的值?
75472 次
4 回答
122
一个像素由一个 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 }
于 2010-04-11T00:06:53.980 回答
73
Java 的Color类可以进行转换:
Color c = new Color(image.getRGB());
int red = c.getRed();
int green = c.getGreen();
int blue = c.getBlue();
于 2010-04-11T00:05:57.050 回答
8
你需要一些基本的二进制算术来拆分它:
int blue = rgb & 0xFF;
int green = (rgb >> 8) & 0xFF;
int red = (rgb >> 16) & 0xFF;
(或者可能反过来,我真的不记得了,文档也没有给我一个即时的答案)
于 2010-04-11T00:06:18.407 回答
7
对于简单的颜色操作,您可以使用
bufImg.getRaster().getPixel(x,y,outputChannels)
outputChannels 是一个用于存储获取的像素的数组。它的长度取决于图像的实际通道数。例如,RGB 图像有 3 个通道;RGBA 图像有 4 个通道。
此方法有 3 种输出类型:int、float 和 double。要获得 0~255 范围内的颜色值,您的实际参数 outputChannels 应该是一个 int[] 数组。
于 2010-04-11T03:25:51.140 回答