vdougnac
Messages postés13Date d'inscriptionsamedi 26 février 2005StatutMembreDernière intervention 2 mai 2007
-
30 mars 2007 à 11:41
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 2013
-
31 mars 2007 à 23:48
Bonjour,
Je souhaiterai créer une image à partir d'un tableau de bytes codant la valeur de chaque pixel, puis l'afficher dans une interface graphique.
J'ai vu qu'il fallait utliser la classe image et lui fournir le tableau de pixel.
byte[] tableauPixels;
...
Image image = createImage(new MemoryImageSource(taille.width, taille.height,tableauPixels, 0, taille.width));
Mon problème est que mon tableau est de type byte et non de type int comme attendue par la fonction.
Belette32
Messages postés57Date d'inscriptionmercredi 14 septembre 2005StatutMembreDernière intervention22 novembre 2007 30 mars 2007 à 13:16
slt, as-tu essayé de créer un second tableau de type int dans lequel tu reprends et convertis toutes les données du tableau précédents au format integer? Il me semble que ce serait la solution la plus rapide à ton problème. Belette32
vdougnac
Messages postés13Date d'inscriptionsamedi 26 février 2005StatutMembreDernière intervention 2 mai 2007 30 mars 2007 à 13:21
Salut,
Oui j'ai converti mon tableau de byte en int mais ensuite, vaut'il mieux creer une image Image ouu buffuredImage ?
Comment afficher l'image en niveau de gris dans une fenêtre ?
Je débute en Java...
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 30 mars 2007 à 23:02
Salut:
Tu peux passer d'un tableau de type byte [] en un tableau de type int [],
en combinant les cases de ton tableau de bytes 3 à 3 pour obtenir en équivalent RGB.
Si je ne me trompe pas trois bytes successives de ce tableau de byte [] représentent:
- niveau du rouge (R)
- niveau du vert (G)
- niveau du bleu (B)
//
// Calculer la valeur RGB en fonction du niveau du rouge, vert, bleu
//
int getRGB (byte red, byte green, byte blue) {
return (int)(red | green << 8 | blue << 16);
}
Bonne chance
________________________________________________________________________________
A.B. :
"Dieu nous donne des mains, mais il ne bâtit pas les ponts"
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 31 mars 2007 à 11:10
Salut,
Petite correction du code ci-dessus qui permet de s'assurer que le compilot n'effectura pas les décalages sur des byte mais sur des int :
int getRGB (byte red, byte green, byte blue) {
return ((int)red | (int)green << 8 | (int)blue << 16);
}
si ton impage contient des pixels transparent pense à les préserver sinon voici le changement d'un pixel en noir et blanc :
public int getPrixelAndTranslateToGray(byte bRed, byte bGreen, byte bBlue){
//pour s'assurer que les calculs se feront bien sur 32bits au lieu de 8
int iRed = (int)bRed;
int iGreen = (int)bGreen;
int iBlue = (int)bBlue;
int moy = ((iRed + iGreen + iBlue) / 3);
return (moy << 16) + (moy << 8) + (moy);
}
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
WORA
Vous n’avez pas trouvé la réponse que vous recherchez ?
vdougnac
Messages postés13Date d'inscriptionsamedi 26 février 2005StatutMembreDernière intervention 2 mai 2007 31 mars 2007 à 23:00
Bonjour,
Merci pour votre aide.
Mon tableau de byte[] code les valeurs des pixels en niveaux de gris, chaque valeur de pixel est sur 1 byte.
C'est donc la fonction inverse à getPrixelAndTranslateToGray que vous décrivez dont j'aurais besoin.
J'ai trouvé une parade consistant à affecter à la transparence de l'image (4ème octet de l'int codant la valeur du pixel) par 255 - la valeur contenu dans le tableau de byte[].
soit:
public int byteGrayToIntGray(byte bGray){
return ( 255 - ((int)(bGray) << 24) );
}
Cela donne l'image en niveau de gris, mais je me demande si c'est vraiment la bonne méthode car en principe le niveau de gris ne devrait pas être associé à la transparence, non ?
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 31 mars 2007 à 23:48
Salut:
Twinuts >> c'est vrai, je n'avais pas fait attention au type. Avec mon code on va perdre des bits.
________________________________________________________________________________
A.B. :
"Dieu nous donne des mains, mais il ne bâtit pas les ponts