getRGB()

getRGB() - Java - Programmation

Marsh Posté le 30-05-2007 à 13:21:22    

bonjour,
 
je souahiterai avoir quelques precision concernant la valeur enregsitrée avec la methode getRGB

Code :
  1. image.getRGB(0, 0, w, h, rgbs, 0, w);


 
je fous ca dans un tableau et ca me sort des valeurs de la forme : -6710887
 
pourquoi negatif ? est ce un chiffre a prendre entierement si je veu le comparer avec un autre ou est ce une suite de valeur pour le R, G et B??? si oui comment les differencier?
a quoi correspond ce chiffre en fait...
merci davance  
guigui

Reply

Marsh Posté le 30-05-2007 à 13:21:22   

Reply

Marsh Posté le 30-05-2007 à 14:36:45    

montre plus de code :o
ca doit te renvoyer un tableau de RGBPixels.. et tu as surement un moyen pour récupérer chaque composante dudit pixel ensuite.

Reply

Marsh Posté le 30-05-2007 à 15:39:23    

voila le code ca marche.

Code :
  1. public class untitled1 {
  2. static BufferedImage image;
  3. static int a=0;
  4. public static void main(String[] args) {
  5. //int[] image1 = testImg("483.JPG" );
  6. //int[] image2 = testImg("484.JPG" );
  7. //int[] image1 = testImg("blanc.JPG" );
  8. //int[] image2 = testImg("noir.JPG" );
  9. //int[] image1 = testImg("479.JPG" );
  10. //int[] image2 = testImg("480.JPG" );
  11. int[] image1 = testImg("493.JPG" );
  12. int[] image2 = testImg("494.JPG" );
  13. //int[] image1 = testImg("481.JPG" );
  14. //int[] image2 = testImg("482.JPG" );
  15. if(image1.length==image2.length)
  16. {
  17. for(int i=0;i<image1.length;i++)
  18. {
  19. if(Math.abs(image1[i]-image2[i])>=200000)
  20. {
  21.  //System.out.println(Math.abs(image1[i]-image2[i]));
  22.  //System.out.println(image1[i]);
  23.  //System.out.println(image2[i]);
  24.  a++;
  25. }
  26. }
  27. System.out.println(a);
  28. }
  29. //System.out.println(image1[0]);
  30. //System.out.println(image2[0]);  
  31. }
  32. public static int[] testImg(String file) {
  33. File fileImg = new File(file);
  34. try {
  35. image = ImageIO.read(fileImg);
  36. } catch (IOException e) {
  37. image = null;}
  38. int w = image.getWidth(null);
  39. int h = image.getHeight(null);
  40. int[] rgbs = new int[w * h];
  41. image.getRGB(0, 0, w, h, rgbs, 0, w);
  42. return rgbs;
  43. }}


 
pour comparer j'ai simplement fait la différence de la valeur absolue de mes deux tableau.
ca marche mais je ne sais tjs pas pourquoi les valeurs retrounées par getRGB sont negative...

Reply

Marsh Posté le 31-05-2007 à 17:14:27    

D'abord, regarde avec la calculatrice Windows, tu verras que -6710887, c'est égal à 0xFFFFFFFFFF999999.
 
Ensuite, si tu regardes la javadoc, tu verras que le tableau d'entiers est en fait un tableau d'octets, donc il ne faut pas le lire avec des données de type int mais plutôt des séries de 3 byte.

Reply

Marsh Posté le 13-06-2007 à 19:20:55    

je dirai meme 4 bytes si l'image comporte de l'alpha, vraisemblablement le cas sur les mobiles
 
par contre, ton

Citation :

Math.abs(image1[i]-image2[i])>=200000


ne signifie physiquement absolument rien (et certainement pas que la luminosité d'un px est supérieure à ... quoi d'ailleurs ??? 200000?)
 :hello:


---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi
Reply

Marsh Posté le 14-06-2007 à 10:37:47    

je teste la différence des deux images, la valeur absolue c'est pour eviter les valeurs negatives (sachant qu'avec un + ou un - cette valeur est la mm)
les tests sont tres concluant malgré la simplicité du calcul.

Reply

Marsh Posté le 14-06-2007 à 10:39:34    

le but konkretement c'est de repérer si l'image n est suffisement différente de l'image n-1 pour etre affichée. le 2000 c'est une sorte de sensibilité

Reply

Marsh Posté le 14-06-2007 à 10:56:38    

comtpe plutot le nombre de pixels differents
 
deux images ne sont pas differentes si il elles ont bcp de pixels en commun  
 
au passage, Math.abs(image1[i]-image2[i])>=200000 ne veut rien dire, il faudrai ( au minimum ) comparer chaque composante indépendammente ( R G et B ) pour que ca ai un sens

Reply

Marsh Posté le 14-06-2007 à 14:52:30    

Citation :

le but konkretement c'est de repérer si l'image n est suffisement différente de l'image n-1 pour etre affichée. le 2000 c'est une sorte de sensibilité


 

Citation :

au passage, Math.abs(image1[i]-image2[i])>=200000 ne veut rien dire, il faudrai ( au minimum ) comparer chaque composante indépendammente ( R G et B ) pour que ca ai un sens


 
C'est bien ce que j'ai voulu dire.
Si tu vx faire une différence entre 2 pixels RGB, tu dois:  
- soit faire composante par composante.
- soit sur la luminosité du pix donnée par sqrt(r²+g²+b²)


---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi
Reply

Marsh Posté le 14-06-2007 à 15:14:48    

ok je vais faire ca
merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed