gpt4 book ai didi

c - 使用 libjpegturbo 解压 jpeg 返回 "Empty input file"

转载 作者:太空宇宙 更新时间:2023-11-04 02:34:37 24 4
gpt4 key购买 nike

如标题所述,我正在尝试使用 libjpeg-turbo 读取 JPEG 文件。我在家里的 Mac 上试过这段代码,它工作正常,但现在我在 Windows 上,它在调用 jpeg_read_header 时给我一个 Empty input file 错误。我已经通过执行 fseek/ftell 验证文件不为空,并且我得到的大小与我期望的大小相对应。

我最初的想法是我可能没有以二进制模式打开文件,所以我也尝试使用 _setmode,但这似乎没有帮助。这是我的代码供引用。

int decodeJpegFile(char* filename)
{
FILE *file = fopen(filename, "rb");

if (file == NULL)
{
return NULL;
}

_setmode(_fileno(file), _O_BINARY);

fseek(file, 0L, SEEK_END);
int sz = ftell(file);
fseek(file, 0L, SEEK_SET);


struct jpeg_decompress_struct info; //for our jpeg info
struct jpeg_error_mgr err; //the error handler

info.err = jpeg_std_error(&err);
jpeg_create_decompress(&info); //fills info structure
jpeg_stdio_src(&info, file);
jpeg_read_header(&info, true); // ****This is where it fails*****
jpeg_start_decompress(&info);


int w = info.output_width;
int h = info.output_height;
int numChannels = info.num_components; // 3 = RGB, 4 = RGBA
unsigned long dataSize = w * h * numChannels;

unsigned char *data = (unsigned char *)malloc(dataSize);
unsigned char* rowptr;
while (info.output_scanline < h)
{
rowptr = data + info.output_scanline * w * numChannels;
jpeg_read_scanlines(&info, &rowptr, 1);
}

jpeg_finish_decompress(&info);
fclose(file);

FILE* outfile = fopen("outFile.raw", "wb");
size_t data_out = fwrite(data, dataSize, sizeof(unsigned char), outfile);

}`

非常感谢任何帮助!

最佳答案

问题的核心是dll不匹配。 libjpeg 是根据 msvcrt.dll 构建的,而应用程序是针对 MSVS2015 提供的任何运行时构建的。它们不兼容,并且在一个运行时打开的文件指针对另一个运行时没有意义。

解决方案,根据这个discussion , 是为了避免 jpeg_stdio_src API。

关于c - 使用 libjpegturbo 解压 jpeg 返回 "Empty input file",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39133386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com