IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques Discussion :

Convertir un JPEG stocké en RAM


Sujet :

Bibliothèques

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Convertir un JPEG stocké en RAM
    Bonjour,

    Je suis confronté au problème suivant : je cherche à convertir un JPEG qui est stocké en RAM en BMP mais ceci doit se faire au sein de la RAM.

    J'ai simplement un pointeur vers une image JPEG stockée en RAM et je souhaite la convertir. Les seules fonctions que j'ai rencontrées dans libjpeg sont des fonctions qui prennent un chemin vers un fichier en entrée.

    Existe-t-il une fonction qui prend un pointeur vers une image JPEG en entrée et qui transforme cette image en BMP ?

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    bonjour

    voila une lib modifier de libjpeg, qui peut prendre un fichier JPEG en memoire

  3. #3
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    voila un pseudo code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     ReadJpegFileBuffer(const char * fileBuffer,const int filesize,char * & buf)
    	{
    	
    	
    	struct jpeg_decompress_struct	cinfo;
    	struct jpeg_error_mgr			jerr;
    	cinfo.err = jpeg_std_error(&jerr);	
     	jpeg_create_decompress(&cinfo);
    	jpeg_stdio_src(&cinfo,(FILE*)fileBuffer,filesize);
     	jpeg_read_header(&cinfo, TRUE);
    	jpeg_start_decompress(&cinfo);
    	
    
    	int h = cinfo.output_height;
    	int w = cinfo.output_width;
            buf = new char[h*w*3];
    
    	for (unsigned int i = 0;i < cinfo.image_height;i++ )
    		{
    		unsigned char * buftmp = buf  + i*w;
    		jpeg_read_scanlines( &cinfo, &buftmp , 1);
    		}
    
    	jpeg_finish_decompress(&cinfo);
    
    
    	}

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Cela te donne le buffer de l'image.
    Ensuite t'as juste a la convertire en bmp


    http://www.developpez.net/forums/sho...d.php?t=365314

  5. #5
    Futur Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Est ce que l'exemple que tu donne utilise la bibliothèque modifiée ? Parce que je ne peux pas l'utiliser (je bosse sur Mac en ce moment).

    J'ai essaye d'utiliser l'exemple, je récolte une segfault à jpeg_read_header(&cinfo, TRUE);

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par Lumbermatt
    Est ce que l'exemple que tu donne utilise la bibliothèque modifiée ? Parce que je ne peux pas l'utiliser (je bosse sur Mac en ce moment).

    J'ai essaye d'utiliser l'exemple, je récolte une segfault à jpeg_read_header(&cinfo, TRUE);
    oui.
    c'est bizzare. Pu tu mettre le code que tu as compilé?

    juste pour être sur de ce que tu as fait :

    fileBuffer = buffer pointant sur le fichier jpeg en memoire
    filesize = taille du fichier en octet

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    voila un code qui prend une image jpeg en entré, copie le fichier en mémoire, le decompresse et copie le buffer dans un fichier ppm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    #include <stdio.h>
    #include "jpeglib.h"
     
    #include "iostream"
    #include "fstream"
     
    int main(int argc, char* argv[])
    {
    	struct jpeg_decompress_struct	cinfo;
    	struct jpeg_error_mgr			jerr;
    	cinfo.err = jpeg_std_error(&jerr);
     
     	jpeg_create_decompress(&cinfo);
     
     
    	//mise d'un fichier jpeg en memoire
    	std::ifstream f(argv[1],std::ios::binary);
    	f.seekg (0, std::ios::end);
    	int fileSize = f.tellg();
    	f.seekg (0, std::ios::beg);
     
    	char* File = new char[fileSize];
    	f.read(File,fileSize);
    	f.close();
    	// fin mise d'un fichier jpeg en memoire
     
    	jpeg_stdio_src(&cinfo, (FILE*)File,fileSize);
    	jpeg_read_header(&cinfo, TRUE);
    	jpeg_start_decompress(&cinfo);
    	std::cout<<"Taille : "<<cinfo.output_height<<"  "<<cinfo.output_width<<std::endl;
    	int h = cinfo.output_height;
    	int w = cinfo.output_width;
     
     
    	//ecriture du buffer dans une ppm
    	std::ofstream fout("test.ppm",std::ios::binary);
    	fout<<"P6"<<std::endl;
    	fout<<w<<" "<<h<<std::endl;
    	fout<<"255"<<std::endl;
    	unsigned char * buffer=new  unsigned char[3*h*w];
     
     
    	for (int lCnt = 0;lCnt < cinfo.image_height;lCnt++ )
    		{
    		int SavePoint = lCnt * 3 * w;
    		unsigned char * buf = &buffer[SavePoint];
    		jpeg_read_scanlines( &cinfo, &buf, 1);
    		}
    	fout.write((char*)buffer,3*h*w);
    	f.close();
     
    	jpeg_finish_decompress(&cinfo);
     
     
     
     
    	return 0;
    }

  8. #8
    Futur Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Le problème ce situe ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jpeg_stdio_src(&cinfo, (FILE*)File,fileSize);
    Il me dit que j'ai trop d'arguments, fileSize est de trop.

    J'arrive pas à compiler la bibliothèque que tu m'a attachée dans un message précédent puisqu'elle est uniquement compilable avec Visual C.

    Pour l'instant, je passe par SDL pour decompresser le JPEG dans une Surface SDL puis je transpose la surface en Image OpenCV. Mais c'est pas faramineux niveau performances.

  9. #9
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par Lumbermatt
    Le problème ce situe ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jpeg_stdio_src(&cinfo, (FILE*)File,fileSize);
    C'est la fonction qui est modifier dans la lib que je t'ai donné



    Citation Envoyé par Lumbermatt
    J'arrive pas à compiler la bibliothèque que tu m'a attachée dans un message précédent puisqu'elle est uniquement compilable avec Visual C.
    Il ne doit pas etre trés dur de la compiler avec un autre compilateur. Si je me trompe juste 2 ou 3 source son modifié par rapport a la lib jpeg originale. Soit tu regarde les dif et tu peut t'en servire pour ce que tu veut, soit tu peut reutiliser le make de la lib originale pour compiler cette lib.

  10. #10
    Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    bonjour,
    je serai intéressé par la bibliothèque jpeglib modifiée. Comment puis je la récupérer?
    merci par avance.
    Lionel

  11. #11
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par catayoyo Voir le message
    bonjour,
    je serai intéressé par la bibliothèque jpeglib modifiée. Comment puis je la récupérer?
    merci par avance.
    Lionel
    dsl je ne l'ai plus.
    regarde freeimage il permet de le faire.

  12. #12
    Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    dsl je ne l'ai plus.
    regarde freeimage il permet de le faire.
    merci pour l'info, je vais regarder.

  13. #13
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par catayoyo Voir le message
    merci pour l'info, je vais regarder.
    Pour info, cette lib je l'avais trouver dans un SDK pour les powershot de canon.

  14. #14
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 45
    Points : 26
    Points
    26
    Par défaut
    Bonjour,

    Je voulais savoir si la libjpeg permettait de convertir un buffer en un nouveau buffer au format jpg?

    Les fonctions:
    jpeg_stdio_dest
    jpeg_start_compress
    jpeg_write_scanlines
    jpeg_finish_compress

    permettre de compresser un buffer au format jpg et de l'écrire dans un fichier. Est-il possible de seulement effectuer la compréssion et d'avoir le résultat dans un buffer sans passer par un fichier?

Discussions similaires

  1. Convertir une procedure stockée MYSQL en PL/SQL?
    Par bliml dans le forum PL/SQL
    Réponses: 0
    Dernier message: 18/09/2008, 10h20
  2. convertir une valeur stocké sur 4 unsigned long en décimal
    Par juanito003 dans le forum Général Python
    Réponses: 3
    Dernier message: 06/12/2007, 20h57
  3. [ImageMagick] Convertir des jpeg, gif en png
    Par WeDgEMasTeR dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 19/04/2006, 10h36
  4. [JP2]Composant pour créer ou convertir un JPEG 2000
    Par Poilou dans le forum C++Builder
    Réponses: 2
    Dernier message: 12/12/2005, 13h35
  5. Comment convertir un Jpeg en .ico
    Par Valéry dans le forum Outils
    Réponses: 5
    Dernier message: 04/07/2003, 09h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo