struct jpeg_decompress_struct cinfo;
struct jpeg_error_mgr jerr;
/* 1. 错误处理挂钩 */
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_decompress(&cinfo);
/* 2. 输入来源 = 文件 */
FILE *fp = fopen(argv[1], "rb");
if (!fp) { perror("fopen"); return 1; }
jpeg_stdio_src(&cinfo, fp);
/* 3. 读取文件头. 返回 JPEG_SUSPENDED 表示数据不完整 */
if (jpeg_read_header(&cinfo, TRUE) != JPEG_HEADER_OK)
printf("error\n");
printf("尺寸: %dx%d\n", cinfo.image_width, cinfo.image_height);
/* 4. 指定解码输出格式: 统一转成 RGB (也可 JCS_GRAYSCALE 出灰度) */
cinfo.out_color_space = JCS_RGB;
/* 5. 开始解码 */
if (!jpeg_start_decompress(&cinfo))
printf("error\n");
/* 6. 逐行读出像素 */
unsigned int rowbytes = cinfo.output_width * cinfo.output_components; //每行多少字节
unsigned char *buf = (unsigned char *)malloc(rowbytes * cinfo.output_height);//分配缓冲区
unsigned char *row = buf; //指向缓冲区的第0下标
while (cinfo.output_scanline < cinfo.output_height) {
jpeg_read_scanlines(&cinfo, &row, 1);//为缓冲区中写入一行数据
row += rowbytes;//行数累加
}
/* 7. 结束解码 + 释放 */
jpeg_finish_decompress(&cinfo);
jpeg_destroy_decompress(&cinfo);
fclose(fp);
最终拿到 buf 以及尺寸,image_width,image_height