2010-11-03 150 views
3

所以我遇到了一个问题,在Windows上使用libjpeg会导致jpeg_read_header()崩溃。jpeg_read_header的替代方案libjpeg

的问题是(很欢快的)描述如下:http://sourceforge.net/projects/gnuwin32/forums/forum/74807/topic/1629371?message=4053776

我已经决定在第三选项,该选项不使用jpeg_stdio_src /目标的API。然而,经过大量的搜索,我似乎无法找到在帖子末尾提到的'将数据提供到libjpeg中的其他方式',任何人都可以将我指向正确的位置?

+0

使用MS VC++ Express版本重新编译库需要不到一分钟的时间。这是不能接受的。 – 2010-11-03 22:41:12

+0

它可能是...但是,我重新编译它,并给我链接器错误的MSVCRT.lib(MSVCR100.dll)的调谐:错误LNK2005:_sprintf已在LIBCMT.lib(sprintf.obj)中定义。理想情况下,我只想使用jpeg_mem_src而不是jpeg_stdio_src,它应该是更加跨平台的。我宁愿不必记住(或者将来有人不得不弄清楚)关于我的jpeg库需要编译的C库的规定= /。 – Tom 2010-11-04 17:39:03

+0

当我试图编译我的项目时,链接器错误来了,顺便说一句。附注:我使用scons和cl.exe作为编译器。 – Tom 2010-11-04 17:40:33

回答

1

如果我正确地理解了这个问题,那是因为windows中所有不同文件句柄之间的区别。它们并不完全相容。

此链接是否有帮助?它会告诉你如何在它们之间进行转换。然后,您可以为函数提供正确类型的文件句柄并使其运行。

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

另外,不要使用JPEG库,并使用另一个。没有我可以特别推荐的,因为我以前没有必要使用jpeg库。

+0

知道的好材料! – Tom 2010-11-04 17:41:09

2

Sompe人report a workaround针对在较新的Visual Studio中与msvcrt链接的问题。通过使用Google MSVCRT.DLL “视觉工作室”

1

其中的 “其他的方法来进给数据” 发现的是这些功能:

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

我最近用libjppeg-turbo遇到了同样的问题。我不想重新编译库或将mscvr.dll链接到我的vs2015应用程序。

这个函数对我有效:jpeg_mem_src(...)而不是使用jpeg_stdio_src。由于它不会将任何C运行时结构传递给库,所以它工作得很好。功能定义可以在这里找到link

它从内存缓冲区而不是文件获取输入数据,如果文件不是太大/内存不是太多的问题,它的工作原理。