passing argument 1 of 'jpeg_read_header' from incompatible pointer type [-Wincompatible-pointer-types]
时间: 2024-04-14 20:29:41 浏览: 216
这个错误是因为`jpeg_read_header`函数的第一个参数类型与你提供的参数类型不匹配。`jpeg_read_header`函数期望的第一个参数是`j_compress_ptr`类型,而你可能错误地传递了其他类型的指针。
确保你正确地创建了`struct jpeg_compress_struct`结构体,并将其地址传递给`jpeg_read_header`函数。以下是一个示例:
```c
void compress_image(const char* input_image, const char* output_image, int quality) {
struct jpeg_compress_struct cinfo;
struct jpeg_error_mgr jerr;
FILE* infile, *outfile;
if ((infile = fopen(input_image, "rb")) == NULL) {
fprintf(stderr, "Can't open %s\n", input_image);
return;
}
if ((outfile = fopen(output_image, "wb")) == NULL) {
fprintf(stderr, "Can't create %s\n", output_image);
fclose(infile);
return;
}
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_compress(&cinfo);
jpeg_stdio_dest(&cinfo, outfile);
jpeg_read_header((j_compress_ptr)&cinfo, TRUE);
cinfo.image_quality = quality;
// 继续处理图像压缩...
fclose(outfile);
jpeg_destroy_compress(&cinfo);
fclose(infile);
}
```
在上述代码中,通过将`&cinfo`强制转换为`j_compress_ptr`类型,我们确保将正确类型的指针传递给了`jpeg_read_header`函数。
请注意,为了避免这种类型不匹配的错误,应该确保所有相关的libjpeg函数和结构体都正确地声明和初始化。另外,确保你已经正确引入了`jpeglib.h`头文件,这样才能正确地使用libjpeg库中的函数和结构体。
阅读全文