2017-03-27 1 views
0

J'ai des difficultés à appliquer des changements de couleur aux pixels d'une image. Il doit être fait par un calcul, par exemple, ceci est le code que je utilise pour en niveaux de gris, qui fonctionne très bien:Modifier une image couleur en rouge, vert ou bleu dans Javafx

for (int x = 0; x < w; x++) { 
      for (int y = 0; y < h; y++) { 
       int pixel = pixelReader.getArgb(x, y); 
       int alpha = ((pixel >> 24) & 0xff); 
       int red = ((pixel >> 16) & 0xff); 
       int green = ((pixel >> 8) & 0xff); 
       int blue = (pixel & 0xff); 

       int avg = (int)(red + green + blue)/3; 
       pixel = (alpha << 24) | (avg << 16) | (avg << 8) | avg; 

       writer.setArgb(x, y, pixel); 

      } 
     } 
     kittenImage.setImage(newImage); 

Comme je l'ai dit, cela fonctionne très bien. Je dois aussi changer l'image en rouge, vert et bleu, et j'ai joué avec ce code pour l'ajuster. Voici le code pour le filtre rouge:

for (int x = 0; x < w; x++) { 
      for (int y = 0; y < h; y++) { 
       int pixel = pixelReader.getArgb(x, y); 
       int alpha = ((pixel >> 24) & 0xff); 
       int red = ((pixel >> 16) & 0xff); 
       int green = ((pixel >> 8) & 0xff); 
       int blue = (pixel & 0xff); 

       int redLevel = (0 << 24) | (red << 16) | (0 << 8) | 0; 
       writer.setArgb(x, y, -redLevel); 
      } 
     } 
     kittenImage.setImage(newImage); 

je l'avais espéré que je pouvais changer autour de quelle couleur était le plus important, mais ce code ne me reçoit une image rouge à la recherche négative, ce qui est pas ce que je dois .

Je ne suis pas en mesure d'afficher des photos à ce sujet apparemment, donc je dois comprendre comment faire pour montrer ce que je veux dire. J'ai fait des recherches et trouvé beaucoup sur les niveaux de gris, mais tout sur le rouge, le bleu et le vert semble pointer vers des fonctions intégrées ou des méthodes qui ne sont pas ce que je cherche.

Ceci est seulement ma deuxième question alors laissez-moi savoir si j'ai besoin d'inclure des informations supplémentaires.

EDIT: C'est ici que j'ai obtenu le niveau de gris, que j'ai modifié avec une autre version qui utilisait Argb au lieu de RGB. (Je n'utilise pas d'image tamponnée). convert a RGB image to grayscale Image reducing the memory in java

Ceci est la version ARVB: http://skrb.hatenablog.com/entry/2013/01/07/171901

Répondre

0

de Nevermind, je continuais à jouer avec elle et réalisé ce que je faisais mal. Je déclarais une nouvelle variable int pour les pixels, quand j'avais juste besoin d'utiliser la variable pixel déjà existante. Comme si:

for (int x = 0; x < w; x++) { 
      for (int y = 0; y < h; y++) { 
       int pixel = pixelReader.getArgb(x, y); 
       int alpha = ((pixel >> 24) & 0xff); 
       int red = ((pixel >> 16) & 0xff); 
       int green = ((pixel >> 8) & 0xff); 
       int blue = (pixel & 0xff); 

       pixel = (alpha << 24) | (red << 16) | (0 << 8) | 0; 
       writer.setArgb(x, y, pixel); 
      } 
     } 
     kittenImage.setImage(newImage); 

Donc, au lieu de "int redLevel" c'est juste le pixel déclaré plus tôt, et cela a fonctionné parfaitement. J'espère que cela peut aider quelqu'un d'autre.