我需要打開/關閉圖像的RGB通道,但是我卡住了,我的代碼有問題。在RGB通道之間切換
你能幫我弄清楚如何以正確的方式做到這一點嗎?這是我的代碼:
功能頻道時1 3的複選框已更改其狀態被調用,並提供它們true == selected
public void channels(boolean red, boolean green, boolean blue) {
if (this.img != null) {// checks if the image is set
char r = 0xFF, g = 0xFF, b = 0xFF;
if (red == false) {
r = 0x00;
}
if (green == false) {
g = 0x00;
}
if (blue == false) {
b = 0x00;
}
BufferedImage tmp = new BufferedImage(
img.getWidth(),
img.getHeight(),
BufferedImage.TYPE_INT_RGB);
for (int i = 0; i < img.getWidth(); i++) {
for (int j = 0; j < img.getHeight(); j++) {
int rgb = img.getRGB(i, j);
int red = (rgb >> 16) & r;
int green = (rgb >> 8) & g;
int blue = (rgb >> 0) & b;
int gbr = (red << 16) | (green << 8) | blue;// EDITED
tmp.setRGB(i, j, gbr);
}
}
img = tmp;
repaint();
} else {
//show error
}
}
謝謝你的幫助的參數!
第一眼看起來不錯,現在當您關閉一個頻道時會發生什麼? – Octopus
看起來你正在錯位。不應該是:'int gbr =(red << 16)| (綠色「8」)藍色;'?你基本上想要按照與你前進的方式相同的順序轉回來......對吧?讓我知道這個是否奏效。如果是這樣,我會把它變成一個答案,所以你可以接受! :) – rayryeng
當我關閉一個頻道是好的,但是當我嘗試打開/關閉其他頻道時,它變得非常混亂。例如,我不能關閉,然後在一個頻道上,並獲得相同的圖像 – Mark