begin process at 2012 05 29 19:49:39
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

OpenGL

 > 

Obtenir un fichier Jpeg en sortie, à la place de la fenetre glut


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Obtenir un fichier Jpeg en sortie, à la place de la fenetre glut

samedi 25 septembre 2004 à 23:59:21 | Obtenir un fichier Jpeg en sortie, à la place de la fenetre glut

gilimcce

Salut à tous :

J'ai quelques soucis conceptuels quant à l'enregistrement d'images. Cad : je modélise un objet 3D, et je dois avoir la possibilité soit d'afficher soit d'enregistrer un jpeg correspondant à ce qui aurait été affiché dans ma fenetre glut.

je dispose bien d'une fonction telle que :

/////////////////////////////////////////////////////


int
write_jpeg(FILE *outfile, int width, int height, unsigned char *rgb,
int quality)
{
struct jpeg_compress_struct cinfo;
struct jpeg_error_mgr jerr;

JSAMPROW scanline[1];

cinfo.err = jpeg_std_error(&jerr);
jpeg_create_compress(&cinfo);
jpeg_stdio_dest(&cinfo, outfile);

cinfo.image_width = width;
cinfo.image_height = height;
cinfo.input_components = 3;
cinfo.in_color_space = JCS_RGB;

jpeg_set_defaults(&cinfo);

jpeg_set_quality(&cinfo, quality, TRUE);

jpeg_start_compress(&cinfo, TRUE);

while (cinfo.next_scanline < (unsigned int) height)
{
scanline[0] = rgb + 3 * width * cinfo.next_scanline;
jpeg_write_scanlines(&cinfo, scanline, 1);
}

jpeg_finish_compress(&cinfo);
jpeg_destroy_compress(&cinfo);

return(1);
}

/////////////////////////////////////////////////////

Mais comment rempli-t-on le tableau d'unsigned char rgb ?
Comment avoir axès aux pixels affichés en fait ?

C'est sans doute facile, mais... bon ... c'est tout moi ça.

///////////////////////////////////////////////////

J'avais tjrs une question sans réponse sur le forum,
sur les moyens d'afficher du texte de couleur (autre que noir)
dans ma fenetre glut. L'utilisation de glutBitmapCharacter semble
limiter au noir, non ?

///////////////////////////////////////////////////

Excellent week end à tous,
dimanche 26 septembre 2004 à 02:43:25 | Re : Obtenir un fichier Jpeg en sortie, à la place de la fenetre glut

tibur

Membre Club
Réponse acceptée !
Salut

> Comment avoir axès aux pixels affichés en fait ?

// Premiere chose : dans quel buffer on doit lire ? (back ou front ?)

glReadBuffer(GL_FRONT); ou glReadBuffer(GL_BACK);

// Ensuite quelques declarations

int width = largeur de la fenetre
int height = hauteur de la fenetre
unsigned char *rgb = new unsigned char [3*width*height];


// On lit les pixels affichés

glReadPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, rgb);
if(glGetError() != GL_NO_ERROR){
// probleme lors de la lecture
}

// Tu enregistre ton image

write_jpeg(outfile, width, height, rgb, quality);

// on libere la memoire allouée pour les pixels

delete [] rgb;



// L'utilisation de glutBitmapCharacter semble limiter au noir, non ?

Ah bon ?


tib
dimanche 26 septembre 2004 à 10:11:47 | Re : Obtenir un fichier Jpeg en sortie, à la place de la fenetre glut

Funto66

Ben voilà pour l'enregistrement tibur a répondu ^^
Pour ce qui concerne glutBitmapCharacter, peut-être en faisant un glColor3f() avant ça changera la couleur du texte?
Mais de toutes façons cette façon d'afficher du texte n'est pas géniale parce que d'une part il me semble bien que tu n'as pas la même flexibilité qu'avec un rendu par textures (genre pour faire tourner le texte, ou l'afficher en 3D, ou encore changer sa taille de façon dynamique...).

J'ai fait une classe pour afficher du texte au format TGA, t'as un exemple ici : http://perso.wanadoo.fr/funto/BaseCode2.rar

Bonne prog ;)

---------------------------------------------------------
Patience et longueur de temps font plus que force ni que rage....
Coucous flingueurs 3D : http://www.freewebs.com/cf3d/
dimanche 26 septembre 2004 à 14:04:44 | Re : Obtenir un fichier Jpeg en sortie, à la place de la fenetre glut

gilimcce

Merci bcp tibur....

J'ai tout de fois un souci
j'obtiens une image toute grise...
trouble, les données sont mal lues.
Et ce qq soit BACK ou FRONT pour le buffer.

pourtant

int
wri_jpeg(FILE *outfile, int width, int height, unsigned char *rgb,
int quality)
{
struct jpeg_compress_struct cinfo;
struct jpeg_error_mgr jerr;

JSAMPROW scanline[1];

cinfo.err = jpeg_std_error(&jerr);
jpeg_create_compress(&cinfo);
jpeg_stdio_dest(&cinfo, outfile);

cinfo.image_width = width;
cinfo.image_height = height;
cinfo.input_components = 3;
cinfo.in_color_space = JCS_RGB;

jpeg_set_defaults(&cinfo);

jpeg_set_quality(&cinfo, quality, TRUE);

jpeg_start_compress(&cinfo, TRUE);

while (cinfo.next_scanline < (unsigned int) height)
{
scanline[0] = rgb + 3 * width * cinfo.next_scanline;
jpeg_write_scanlines(&cinfo, scanline, 1);
}

jpeg_finish_compress(&cinfo);
jpeg_destroy_compress(&cinfo);

return(1);
}

void lect_buffer(int width, int height)
{
glReadBuffer(GL_BACK);
// ou glReadBuffer(GL_BACK);

unsigned char *rgb = new unsigned char [3*width*height];

// On lit les pixels affichés
glReadPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, rgb);

// probleme lors de la lecture
if(glGetError() != GL_NO_ERROR){cout<<endl<<"Dans XPlanet [lecture buffer] : Probleme lecture buffer"<<endl;exit(0);}

// Choix du chemin
char phr2[100]; vidage(phr2,100);
strcat(phr2,"/stage/poirey/premierefois.jpg");

// wri_jpeg attend une chaine de type file
FILE *file2=fopen(phr2,"w");

// probleme lors de la l'ouverture
if (file2==NULL) {cout<<endl<<"Dans xplanet [lecture buffer] : Probleme ouverture jpeg"<<endl; exit(0);}

// appel de la fonction de creation du jpeg, une fois que les pixels ont ete lus et ranges
wri_jpeg(file2, width, height, rgb, 80);

// on libere la memoire allouée pour les pixels
delete [] rgb;
}

/////////////////////////////////////////////////

Pour gluBitmapCharacter... bah oui... semblerait.

A bientot....
dimanche 26 septembre 2004 à 14:07:07 | Re : Obtenir un fichier Jpeg en sortie, à la place de la fenetre glut

gilimcce

D'autant qu'il n'y a aucun message d'erreur
Et l'affichage glut est correct.
dimanche 26 septembre 2004 à 16:44:51 | Re : Obtenir un fichier Jpeg en sortie, à la place de la fenetre glut

Funto66

Hmm...je vois pas...
D'une part, t'as bien vérifié que wri_jpeg() fonctionne bien?
Après, sinon, y'a une source qui permet de faire une capture d'écran et d'enregistrer dans un TGA sur le site, c'est une des sources de xarier, si ça peut t'aider...

Si j'étais toi, d'abord je testerais wri_jpeg(), genre en lui donnant une mini-image du style
unsigned char data = {...les données RGB...};

Ensuite, si wri_jpeg fonctionne, vérifie que la partie glReadPixels() fonctionne, par exemple en utilisant les pixels lus pour les mettre sur une texture (glTexImage2D, ou plutôt gluBuild2DMipmaps ^^).

Enfin, si les 2 fonctionnent, ben je vois pas comment le lien entre les 2 ne marcherait pas...


---------------------------------------------------------
Patience et longueur de temps font plus que force ni que rage....
Coucous flingueurs 3D : http://www.freewebs.com/cf3d/
dimanche 26 septembre 2004 à 19:52:48 | Re : Obtenir un fichier Jpeg en sortie, à la place de la fenetre glut

gilimcce

Mouais,

la fonction wri_jpeg pose pas de probleme.
Mais readpixel, donc.

quand j'essais de mapper avec rgb rempli,
l'image est brouillée (comme qd je mappais mon onjet avec
un tableau dont les donnees n'étaient pas contigues)

faut croire que l'ordre dans lequel readpixel lit est différent
de celui ds lequel le fichier les attend.

lundi 27 septembre 2004 à 12:29:01 | Re : Obtenir un fichier Jpeg en sortie, à la place de la fenetre glut

gilimcce

C'est bon... ça marche !!

Le probleme est que je lisais le buffer apres l'avoir vidé...
glutSwappBuffers.

Toujours pas d'idée pour afficher un texte en couleur
D'une manière simple ?

A plus... et merci.
lundi 27 septembre 2004 à 12:32:00 | Re : Obtenir un fichier Jpeg en sortie, à la place de la fenetre glut

gilimcce

j'avais pas vu le post de Funtoo.
je vous tiens au courant
lundi 27 septembre 2004 à 16:25:26 | Re : Obtenir un fichier Jpeg en sortie, à la place de la fenetre glut

gilimcce

Pour Founto >>

Merci pour ton lien :
si j'ai bien tout lu, il me faut :

utiliser les fichiers
TGALoader.h/cpp
TxtRenderer.h/cpp
Util.h/cpp

Si je divise ma fenetre en 3 :
sous glviewport j'appelle
TextRenderer::init
puis TextRenderer:Ecrire2D

Coté passage de parametre :
void TxtRenderer::Init(
const char* str_fichier_tga, // le fichier contenant la texture ?
Couleur couleur, // ... couleurs predefinies
int x, int y, // coordonnees ou la texture est inseree ?
TGAFiltering filtering, // ???
int largeur_car, int hauteur_car, // ok
int espace_v, int espace_h // espace entre mots et lignes ?
)

Merci pour les quelques precisions...

Ah... aussi,
pourquoi ecrit-on
#include "SDL.h" et pas <SDL.h> ?

et "SDL_opengl.h", d'où est chargé la bibl ?

1 2

Cette discussion est classée dans : int, jpeg, cinfo, compress, scanline


Répondre à ce message

Sujets en rapport avec ce message

Librairie jpeg et bug : user breakpoint called from code 0x7c911230 [ par Ayla_21 ] Bonjour tout le mondeaprès des jours et des jours de bataille acharnée avec la librairie Jpeg, j'ai réussi à l'installer et à débugger quelques lignes libjpeg. visual studio OpenGl [ par akim08 ] Bonjour a tous,Voila je dois realiser un projet en openGl, en utilisant pour la 1er fois visual studio.j'arrive a la phase de texturation et je suis o Decompression JPEG [ par aziatedu13 ] bonjour,Je cherche a faire une fonction de décompression en Jpeg to BMP.J'ai pris quelque exemple masi un problème me bloque.voici tout d'abord ma fon [HELP]DirectShow : SampleGrabber + libjpeg [ par shyne99 ] Bonjour, Voila je modifie le programme Playcap fourni dans la SDK de DirectShow. Ce programme creer un graph afin de recuperer le flux video de la c ProgressBar [ besoin d'aide ] [ par comi512 ] Bonjours, Je debute en c++ , et je voudrais savoir comment on fait pour faire une ProgressBar sous Dev-c++. Je ne sait meme pas ou l'appeler et tout Probleme pour mon programme [ par luffy DRAGON ] Bonjour j'utilise visual C++ 2008 expresse. J'ai récupéré un fichier sur cppfrance dans l'espoir de pouvoir l'adapter à mes besoin. Je cherche au fina erreur de pointeur [ par africanwinners ] Bonsoir j'ai concu un programme c qui permet de lire un fichier,de supprimer les doublons (les doubles) mais il y a des problèmes lors de la lecture d sensors en C++ wrapper ? [ par panthere007 ] Hello Je voudrai me bricoller un petit sof en console pour y afficher des alertes a ma sauce ,osd ,tty, son etc etc... man libsensors fourni bien de Conversion d'un double en un tableau d'entier [ par ArzadSharlaan ] Bonjour à tous, Je cherche à convertir une varaible de type double en un tableau d'entier afin de pouvoir l'écrire dans une mémoire de type EEPROM sa


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,948 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales