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