2010-11-03 7 views
3

Donc, je rencontre un problème avec libjpeg sous Windows, ce qui provoque le crash de jpeg_read_header().alternatives à jpeg_read_header libjpeg

Le problème est (assez hilarante) décrit ici: http://sourceforge.net/projects/gnuwin32/forums/forum/74807/topic/1629371?message=4053776

J'ai décidé le 3 option, qui n'utilise pas jpeg_stdio_src/API dest. Cependant, après de nombreuses recherches sur google, je n'arrive pas à trouver les «autres façons de nourrir les données dans libjpeg» mentionnées à la fin du post, quelqu'un peut-il me pointer au bon endroit?

+0

La recompilation de la bibliothèque à l'aide de MS VC++ Express a pris moins d'une minute. Est-ce que ce n'est pas acceptable pour vous. –

+0

il pourrait avoir à être ... Cependant, je l'ai recompilé et cela m'a donné des erreurs de l'éditeur de liens à l'air de MSVCRT.lib (MSVCR100.dll): erreur LNK2005: _sprintf déjà défini dans LIBCMT.lib (sprintf.obj). Idéalement, je veux juste pouvoir utiliser jpeg_mem_src au lieu de jpeg_stdio_src, ce qui devrait être plus multiplateforme. Je préférerais ne pas avoir à me souvenir (ou que quelqu'un doive comprendre à l'avenir) une stipulation de ce que C bibliothèque ma bibliothèque jpeg doit être compilée = /. – Tom

+0

les erreurs de l'éditeur de liens sont venues quand j'ai essayé de compiler mon projet, btw. Note de côté: J'utilise scons avec cl.exe comme compilateur. – Tom

Répondre

1

Si je comprends bien le problème, c'est à cause des différences entre les différentes poignées de fichiers dans Windows. Ils ne sont pas tous compatibles les uns avec les autres.

Ce lien serait-il utile? il vous dit comment convertir entre eux tous. Vous pouvez alors fournir le type de handle de fichier correct à la fonction et l'exécuter.

http://www.codeproject.com/KB/files/handles.aspx

Sinon, ne pas utiliser cette bibliothèque jpeg et utiliser un autre. Il n'y en a pas que je puisse recommander car je n'ai jamais eu besoin d'utiliser une librairie jpeg auparavant.

+0

bon matériel à connaître! – Tom

2

Sompe gens report a workaround pour le problème avec le lien avec msvcrt dans le nouveau studio visuel. Trouvé par googler msvcrt.dll "visual studio"

1

L'un des "autres façons de nourrir les données" sont ces fonctions:

  1. jpeg_CreateDecompress
  2. jpeg_read_header
  3. jpeg_start_decompress
  4. jpeg_read_raw_data/jpeg_read_scanlines
  5. jpeg_destroy_decompress
0

J'ai récemment rencontré le même problème avec libjppeg-turbo. Je ne voulais pas recompiler la bibliothèque ou lier mscvr.dll à mon application vs2015. Cette fonction a fonctionné pour moi: jpeg_mem_src(...) au lieu d'utiliser jpeg_stdio_src. Comme il ne transmet aucune structure d'exécution C à la bibliothèque, cela fonctionne très bien. La définition de la fonction peut être trouvée ici link

Il obtient les données d'entrée à partir d'un tampon de mémoire au lieu d'un fichier, ce qui fonctionne si votre fichier n'est pas trop grand/la mémoire ne pose pas trop de problème.