我最近正在尝试更新my game以压缩格式(JPEG 和 PNG)存储图形。
虽然我最终选择了另一个图书馆,但我最初的尝试是合并ijg进行JPEG解压缩。然而,我什至无法让最简单的控制台应用程序工作,并且想知道是否有人能够阐明其原因。
这是我的代码,链接到jpeg.lib这是 ijg 包的一部分:
#include "stdafx.h"
#include <stdio.h>
#include <assert.h>
#include <jpeglib.h>
int _tmain(int argc, _TCHAR* argv[])
{
struct jpeg_decompress_struct cinfo;
struct jpeg_error_mgr jerr;
JSAMPARRAY buffer;
int row_stride;
//initialize error handling
cinfo.err = jpeg_std_error(&jerr);
//initialize the decompression
jpeg_create_decompress(&cinfo);
FILE* infile;
errno_t err = fopen_s(&infile, "..\\Sample.jpg", "rb");
assert(err == 0);
//specify the input
jpeg_stdio_src(&cinfo, infile);
//read headers
(void) jpeg_read_header(&cinfo, TRUE);
return 0;
}
问题是调用jpeg_read_header()
因访问冲突而失败:
0x7c91b1fa 处未处理的异常
JPEGTest.exe 中的 (ntdll.dll):
0xC0000005:写入访问冲突
位置 0x00000010。
有谁知道我可能做错了什么?
我刚刚遇到了同样的问题(尽管我正在尝试对图像进行编码)。
显然,FILE* 不能在 DLL 之间移植,因此您不能使用任何将 FILE* 作为参数的 libjpeg API。
有多种解决方案,但它们都归结为必须重建库:
- 将库构建为静态库,并将其链接到您的应用程序。这就是我所做的,它解决了我的问题。
- 将源/目标处理程序从 libjpeg 移出并移入您的应用程序。然后,您可以将 libjpeg 构建为静态库或 DLL,无论哪种方式适合您。我不确定这是否可行,但这是与源代码一起分发的“install.doc”文件中建议的解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)