C++ jpeg\u read\u头libjpeg的替代方案

C++ jpeg\u read\u头libjpeg的替代方案,c++,c,windows,libjpeg,C++,C,Windows,Libjpeg,因此,我在Windows上使用libjpeg时遇到了一个问题,导致jpeg\u read\u header()崩溃 这里(相当有趣地)描述了这个问题: 我决定使用第三个选项,即不使用jpeg\u stdio\u src/dest API。然而,在谷歌搜索了很多次之后,我似乎找不到文章末尾提到的“将数据输入libjpeg的其他方法”,有人能给我指出正确的位置吗?如果我正确理解这个问题,那是因为windows中各种文件句柄之间的差异。它们并不都是相互兼容的 这个链接会有帮助吗?它告诉你如何在它们之间

因此,我在Windows上使用libjpeg时遇到了一个问题,导致jpeg\u read\u header()崩溃

这里(相当有趣地)描述了这个问题:


我决定使用第三个选项,即不使用jpeg\u stdio\u src/dest API。然而,在谷歌搜索了很多次之后,我似乎找不到文章末尾提到的“将数据输入libjpeg的其他方法”,有人能给我指出正确的位置吗?

如果我正确理解这个问题,那是因为windows中各种文件句柄之间的差异。它们并不都是相互兼容的

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

或者,不要使用该jpeg库,而是使用另一个jpeg库。没有我可以特别推荐的,因为我以前不需要使用jpeg库。

在较新的VisualStudio中针对msvcrt链接的问题向人们发问。通过谷歌搜索msvcrt.dll“visual studio”

找到的“提供数据的其他方法”之一是以下函数:

  • jpeg_解压
  • jpeg\u读取\u头
  • jpeg\u开始\u解压缩
  • jpeg\u读取\u原始数据/jpeg\u读取\u扫描线
  • jpeg\u销毁\u解压缩

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

    这个函数对我有用:
    jpeg\u mem\u src(…)
    而不是使用
    jpeg\u stdio\u src
    。由于它不向库传递任何C运行时结构,因此工作正常。函数定义可以在这里找到


    它从内存缓冲区而不是文件中获取输入数据,如果您的文件不太大/内存不是太大的问题,它就可以工作

    我也有类似的问题,在寻找解决方案时遇到了这篇文章。最终,我只是把代码弄乱了,因为直接从文件中读取对我来说至关重要。要修复此问题,我执行了以下操作:

    // Declare needed structs
    struct jpeg_decompress_struct dinfo;
    struct jpeg_error_mgr jerr;
    
    // Open file
    FILE * infile = fopen("myimage.jpg", "rw");
    
    // Create error manager instance
    dinfo.err = jpeg_std_error(&jerr);
    
    // Decompression process
    jpeg_create_decompress(&dinfo);
    jpeg_stdio_src(&dinfo, infile);
    jpeg_read_header(&dinfo, TRUE);
    
    // ... remainder of program
    

    这两个函数工作正常,完成此操作后,正如预期的那样。。。我不确定这为什么解决了我的问题,但我接受了。希望这对其他人有所帮助。

    使用MS VC++Express edition重新编译库不到一分钟。这对你来说是不可接受的。它可能必须是。。。但是,我重新编译了它,这给了我MSVCRT.lib(MSVCR100.dll)的链接器错误:错误LNK2005:_LIBCMT.lib(sprintf.obj)中已经定义了sprintf。理想情况下,我只希望能够使用jpeg_mem_src而不是jpeg_stdio_src,这应该更跨平台。我不想记住(或者让任何人在将来弄清楚)我的jpeg库需要编译的C库的规定=/。顺便说一句,链接器错误是在我试图编译我的项目时出现的。旁注:我使用的是带有cl.exe的SCON作为编译器。