Je dois activer/désactiver les canaux RVB d'une image, mais je suis coincé et mon code est bogué.Basculer entre les canaux RVB
Pouvez-vous m'aider à trouver la bonne façon? Ceci est mon code:
Les canaux de fonction est appelée lorsque 1 de 3 cases à cocher a changé son état et fournit les arguments qui sont 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
}
}
Merci pour votre aide!
semble bon à première vue, que se passe-t-il réellement maintenant quand vous éteignez une chaîne? – Octopus
Il semble que vous vous trompez de bits. Cela ne devrait pas être: 'int gbr = (red << 16) | (vert << 8) | bleu? Vous voulez essentiellement revenir dans le même ordre que la façon dont vous vous êtes décalé pour commencer ... non? Laissez-moi savoir si cela fonctionne. Si c'est le cas, je vais transformer cela en une réponse que vous pouvez accepter! :) – rayryeng
lorsque j'éteins une chaîne, c'est OK, mais quand j'essaie d'allumer/éteindre d'autres chaînes, ça devient très salissant. Par exemple je ne peux pas éteindre puis sur un canal et obtenir la même image – Mark