Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1149 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Convertir un JPEG stocké en RAM

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Convertir un JPEG stocké en RAM

n°1592676
sophocle38
Posté le 28-07-2007 à 08:46:07  profilanswer
 

Salut,
 
J'ai le soucis 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.
 
J'ai essayé de passer ce pointeur en le castant en FILE, mais il me jette en faisant une segfault. Je vous colle quand même le code que j'ai utilisé à la fin du message (memory.chunk pointe vers le début du fichier en mémoire).
 
Existe-t-il une fonction qui prend un pointeur vers une image JPEG en entrée et qui transforme cette image en BMP ?
 

Code :
  1. struct jpeg_decompress_struct cinfo;
  2. struct jpeg_error_mgr jerr;
  3. cinfo.err = jpeg_std_error(&jerr);
  4. jpeg_create_decompress(&cinfo);
  5. jpeg_stdio_src(&cinfo, (FILE*)chunk.memory);
  6. jpeg_read_header(&cinfo, TRUE);    <-- Ca SEGFAULT ici
  7. jpeg_start_decompress(&cinfo);


 
Merci beaucoup.

mood
Publicité
Posté le 28-07-2007 à 08:46:07  profilanswer
 

n°1592694
djobidjoba
Posté le 28-07-2007 à 10:44:38  profilanswer
 

jpeg_read_header doit tenter de lire depuis ton pointeur en memoire avec des primitives d'acces aux fichier.
rassure-toi, tu n'est pas le seul à chercher une solution, cf google
 
http://www.google.fr/search?q=jpeg [...] =firefox-a
http://developer.popcap.com/forums [...] php?t=2459

n°1592768
Sve@r
Posté le 28-07-2007 à 20:17:47  profilanswer
 

sophocle38 a écrit :

J'ai essayé de passer ce pointeur en le castant en FILE, mais il me jette en faisant une segfault.


C'est évident. Une structure de type "FILE" est une structure bien spéciale qui permet de gérer des fichiers. Cette structure est initialisée par fopen(). Toi, t'as un pointeur qui pointe vers une zone qui n'a absolument aucun rapport avec une structure FILE. Même si tu castes ce pointeur, la zone pointée ne deviendra pas de type "FILE" pour autant...

sophocle38 a écrit :

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.


Tu veux sans doute dire "qui prennent un pointeur de type FILE*". La première solution batarde serait de descendre ton BMP dans un fichier mais tu as sûrement dû y penser. Une autre solution pourrait être une approche équivalente (si t'es sur un système norme POSIX style UNIX/LINUX)
1) tu crées une fonction qui benne ton BMP dans un pipe mémoire
2) de l'autre coté (probablement un fork), tu ouvres ton pipe (open) et tu dupliques le canal de lecture vers un FILE *...


Message édité par Sve@r le 28-07-2007 à 20:18:56

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1592892
_darkalt3_
Proctopathe
Posté le 29-07-2007 à 12:06:15  profilanswer
 

Tu peux aussi checker du coté de cximage sur codeproject, ca peut te donner des pistes. Ce sont des sources de conversions de formats d'images, bien foutu et free.


---------------
Töp of the plöp
n°1592900
Taz
bisounours-codeur
Posté le 29-07-2007 à 12:42:18  profilanswer
 

sinon tu te payes juste un OS et tu fais avec un fichier temporaire et ton BMP restera en RAM tout simplement.

n°1593115
tpierron
Posté le 30-07-2007 à 02:16:33  profilanswer
 

Moué, c'est beaucoup plus gore que ça.
 
Si ce que tu as, est vraiment un stream JPEG, tu va devoir rediriger les callbacks de lecture via une structure jpeg_source_mgr (je te laisse le soin de te palucher la doc).
 
Avec ça, tu vas pouvoir récupérer les scanlines de ton image via jpeg_read_scanlines et construire ton BMP à partir de là.
 
Il n'y a pas des masses de codes (100 lignes de C à tout casser) mais l'API de la libjpeg commence à se faire vieille ...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Convertir un JPEG stocké en RAM

 

Sujets relatifs
convertir utf-8 en iso-8859-1Convertir adresse de Cells en Range
[fonction] pour convertir les accents et choses non ascii ?Convertir plusieurs fichiers en UTF8?
convertir un int en char*J'ai un fichier stocké sur c: et ...
Convertir une chaine en déclaration de variableTraitement par lot, convertir les fichiers avec la mêm extention
convertir fichier mdb en xls[C] utiliser un nombre stocké dans un fichier
Plus de sujets relatifs à : Convertir un JPEG stocké en RAM


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR