补码图像 - 从图像的像素读取rgb值并实现适当的变换函数

时间:2013-11-05 18:47:46

标签: java image-processing image-manipulation

在我看来,我一直在努力解决一个小问题。我的任务是实现转换功能,使给定的图像成为补码图像。我的代码工作,输出和图像具有不同的颜色,但我不确定该功能是否真正改变了彼此互补的色调。我已经包含了我的代码中最重要的部分以供参考。任何指针?

float hue,sat,brightness;
int rgbValues;

float[]hsbVals=Color.RGBtoHSB(red, green , blue , null );
hue=hsbVals[0];
sat=hsbVals[1];
brightness=hsbVals[2]; 

rgbValues=Color.HSBtoRGB(hue, sat, brightness);
red=(rgbValues << 16)& 0xFF;
green=(rgbValues << 8) & 0xFF;
blue= rgbValues & 0xFF;


/* Put these values into imageTwo */
imageTwo.setRGB(x, y,red, green, blue);
 }
}  

1 个答案:

答案 0 :(得分:0)

看起来你正试图在这里“解包”RGB整数:

red=(rgbValues << 16)& 0xFF;
green=(rgbValues << 8) & 0xFF;
blue= rgbValues & 0xFF;

但是你正在改变错误的方式。请参阅Color.getRGB

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

现在你没有做任何事情来获得补充。你得到不同的颜色,因为你的左移导致红色和绿色总是为0.如果补码你的意思是complementary colors你需要将色调旋转180度。

float[] hsb = Color.RGBtoHSB(Color.CYAN.getRed(), Color.CYAN.getBlue(), Color.CYAN.getGreen(), new float[3]);
hsb[0] = hsb[0] + 0.5f > 1.0f ? hsb[0] - 0.5f : hsb[0] + 0.5f;
Color shouldBeRed = new Color(Color.HSBtoRGB(hsb[0], hsb[1], hsb[2]));