我正在尝试学习如何使用 jpeg-turbo 库。我有一个魔鬼的时间开始。doc 文件夹中的 example.c 示例,以及我在网上找到的每个示例,当我尝试读取 .jpg 文件时在 VS2013 中崩溃。他们编译得很好。但是当我运行它们时,它们会因访问冲突错误而崩溃。
我真正需要的是一个可以在 VS2013 x64 中正常运行的小型工作(对初学者友好)示例。包括 main(){} 代码块代码。如果我可能需要设置的 VS 项目属性中有什么特别的东西可能会导致崩溃。
我正在努力让一个简单的例子工作。
谢谢您的帮助。
*编辑——这是一个非常小的例子。我也尝试让 jpeglib 在使用和不使用 Boost/GIL 的情况下运行,但加载图像时它总是崩溃:异常在 0x00000000774AE4B4 (ntdll.dll)
#include <stdio.h>
#include <assert.h>
#include <jpeglib.h>
#pragma warning(disable: 4996)
int main(int argc, char* 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);
FILE* infile;
infile = fopen("source.jpg", "rb");
assert(infile != NULL);
//initialize the decompression
jpeg_create_decompress(&cinfo);
//specify the input
jpeg_stdio_src(&cinfo, infile);
//read headers
(void)jpeg_read_header(&cinfo, TRUE);
jpeg_start_decompress(&cinfo); <----This guy seems to be the culprit
printf("width: %d, height: %d\n", cinfo.output_width, cinfo.output_height);
row_stride = cinfo.output_width * cinfo.output_components;
buffer = (*cinfo.mem->alloc_sarray)
((j_common_ptr)&cinfo, JPOOL_IMAGE, row_stride, 1);
JSAMPLE firstRed, firstGreen, firstBlue; // first pixel of each row, recycled
while (cinfo.output_scanline < cinfo.output_height)
{
(void)jpeg_read_scanlines(&cinfo, buffer, 1);
firstRed = buffer[0][0];
firstBlue = buffer[0][1];
firstGreen = buffer[0][2];
printf("R: %d, G: %d, B: %d\n", firstRed, firstBlue, firstGreen);
}
jpeg_finish_decompress(&cinfo);
return 0;
}