gilimcce
Messages postés33Date d'inscriptionjeudi 2 septembre 2004StatutMembreDernière intervention27 septembre 2004
-
9 sept. 2004 à 16:34
martinbrochet
Messages postés33Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention25 mai 2005
-
25 mai 2005 à 14:10
Il semblerait que mes problèmes de texture soit liée à cela :
je charge une image en niveau de gris, alors que ma fonction
chargeant l'image attend une image RGB... Du coup il manque
des informations et le mappage n'est que partiel.
Je ne comprends pas bien la méthode qui permettrais
de passer de l'un à l'autre...
cs_eRoZion
Messages postés241Date d'inscriptionvendredi 23 mai 2003StatutMembreDernière intervention 8 octobre 20071 9 sept. 2004 à 21:02
djl > "en rgb, 1 couleurs = 3octets"
Faut faire gaffe, ça c'est le cas des image rgb_24-bits, mais dans celui des images rgb_32-bits, il y a 4 octets à lire, le 4ème étant la transparance alpha (et c'est aujourdhui le format le plus souvent utilisé par defaut).
gilimcce > tu peux aussi tout simplement convertir le type de ton image à l'aide d'un logiciel de retouche. La démo d'acdsee (par exemple) le fait très bien et l'image est strictement la même visuellement. Par contre le fichier final est forcément plus lourd.
cs_eRoZion
Messages postés241Date d'inscriptionvendredi 23 mai 2003StatutMembreDernière intervention 8 octobre 20071 9 sept. 2004 à 22:54
Exact, mais nombreux sont les logiciels et les docs qui par abus de langage ne font pas la distinction.
Autant donner à gilimcce tous les éléments pour y arriver. :)
gilimcce
Messages postés33Date d'inscriptionjeudi 2 septembre 2004StatutMembreDernière intervention27 septembre 2004 9 sept. 2004 à 23:25
Ah vous etes forts....
Bon, toutefois :
=> pas de souci avec le parametre alpha. Les ".jpeg" ne sont codés que sur trois octets RGB.
=> en copiant l'octet courant dans chaque case RGB, j'obtiens mon mapping complet...
=> pour etre plus clair, je vous livre le code :
AVANT ////////////
jpeg_start_decompress(&cinfo);
ligne=image;
while (cinfo.output_scanline<cinfo.output_height)
{
ligne=image+3*1440*cinfo.output_scanline;
jpeg_read_scanlines(&cinfo,&ligne,1);
}
jpeg_finish_decompress(&cinfo);
jpeg_destroy_decompress(&cinfo);
// rearangement de l'image scannee dans le tableau de texture 3D
for (i=0;i<720;i++)
for (j=0;j<1440;j++)
{
texture[i][j][0]=image[i*1440*3+j*3];
texture[i][j][1]=image[i*1440*3+j*3+1];
texture[i][j][2]=image[i*1440*3+j*3+2];
}
APRES /////////////////
jpeg_start_decompress(&cinfo);
ligne=image;
while (cinfo.output_scanline<cinfo.output_height)
{
ligne=image+1440*cinfo.output_scanline;
jpeg_read_scanlines(&cinfo,&ligne,1);
}
jpeg_finish_decompress(&cinfo);
jpeg_destroy_decompress(&cinfo);
// rearangement de l'image scannee dans le tableau de texture 3D
for (i=0;i<720;i++)
for (j=0;j<1440;j++)
{
texture[i][j][0]=image[i*1440+j];
texture[i][j][1]=image[i*1440+j];
texture[i][j][2]=image[i*1440+j];
}
}
FIN /////////
Au plaisir de solliciter une nouvelle fois votre aide,
ce qui devrait etre pour bientot.
// la lib jpeg est ecrite en C et non pas en C++
#ifdef __cplusplus
extern "C" {
#endif
#include <jpeglib.h>
#include <jerror.h>
#ifdef __cplusplus
}
#endif
if ((cinfo.image_width!=1440)||(cinfo.image_height!=720)) {
fprintf(stdout,"Erreur : l'image doit etre de taille 1440x720\n");
exit(1);
}
if (cinfo.jpeg_color_space==JCS_GRAYSCALE)
{
jpeg_start_decompress(&cinfo);
ligne=image_gris;
while (cinfo.output_scanline<cinfo.output_height)
{
ligne=image_gris+1440*cinfo.output_scanline;
jpeg_read_scanlines(&cinfo,&ligne,1);
}
jpeg_finish_decompress(&cinfo);
jpeg_destroy_decompress(&cinfo);
// rearangement de l'image scannee dans le tableau de texture 3D
// ici nous sommes en niveau de gris, donc on copie le meme octet dans
// chacune des 3 cases RGB
// merci � jonatahn
for (i=0;i<720;i++)
for (j=0;j<1440;j++)
{
texture[i][j][0]=image_gris[i*1440+j];
texture[i][j][1]=image_gris[i*1440+j];
texture[i][j][2]=image_gris[i*1440+j];
}
}