图像处理理解

时间:2013-06-25 12:22:57

标签: java image-processing

public void Only_GREEN() 
{

    for(int y=0;y<bi.getHeight();y++)
    {

        for(int x=0;x<bi.getWidth();x++)
        {

            int rgb = bi.getRGB(x, y);
            Color c = new Color(rgb);

            int r=c.getGreen();

            rgb = (0xff000000) | (0 << 16) | (r << 8) | (0 << 0);
            System.out.println("hi",rgb);
            bi.setRGB(x, y, rgb);

        }

    }

}

这是用于绘制绿色图片的一些代码。我无法理解以下两行:

int r=c.getGrenn()
rgb = (0xff000000) | (0 << 16) | (r << 8) | (0 << 0);

他们做了什么?

2 个答案:

答案 0 :(得分:2)

我们假设a = 0xf000b = 0x000f

x | ybitwise orxy或两者中的每个位都将在结果输出上设置为1a | b将成为0xf00fb | b将成为0x000f

x << numleft shiftx中的每一位都会将num位置移到左侧。左侧偏移的值将丢失,右侧的新值将为零。 b << 4将成为0x00f0a << 4将成为0x0000

所以,让我们分解您选择的代码。第一部分看起来只是将绿色值作为int(将有一个位表示)。第二部分更有趣:

// Start
rgb = (0xff000000) | (0 << 16) | (r << 8) | (0 << 0);

// 1. Do the parts in parentheses. Notice the green value was shifted over two bits
rgb = 0xff000000 | 0x00000000 | 0x0000rr00 | 0x00000000;

// 2. Apply the ORs
rgb = 0xff00rr00;

那发生了什么事?看起来这会将alpha(前两个字节)设置为全1,因此颜色是不透明的。然后它将红色(后两个字节)和蓝色(后两个字节)清零。它保持绿色,将其移位到RGB表示的绿色部分。这是有效的,因为RGB hex representation看起来像0xAARRGGBB,其中A是alpha,R是红色,G是绿色,B是蓝色。

答案 1 :(得分:1)

getGreen()函数返回颜色的绿色部分的值。

颜色通常以十六进制代码表示,包含六个字符,前两个字符为红色,后两个字符为绿色,后两个字符为蓝色。

(r<<8)将两个绿色字符移到两个字符上,因此它符合标准的十六进制颜色代码。两个十六进制字符长8位,这就是它向左移动8的原因,将绿色值放在正确的空间中。