我尝试使用img2dec.c中定义的ff_load_image
函数加载图像文件:
char* filename = argv[1];
uint8_t* data;
int linesize, width, height, log_ctx;
enum AVPixelFormat pix_fmt = AV_PIX_FMT_RGB24;
//load the image
int i = ff_load_image(&data, &linesize, &width, &height, &pix_fmt, filename, &log_ctx);
printf("%in", i);
然而,我得到一个分割错误无缘无故。我把printf
语句放到了ff_load_image
上,它一直到函数的末端。为什么会出现分割错误?有没有更好的方式来加载图片?我想要得到图片中的每个像素
我怀疑你传递了不正确的参数。根据ff_load_image
文档,您的参数应该是:
- uint8_t * [4]
- int [4]
- int *
- int *
- enum AVPixelFormat *
- const char *
- void *
你的前两个论点似乎不正确。
- 你的第一个参数是
uint8_t **
,如果你为至少4个uint8_t
指针分配内存,但data
没有指向有效的内存,这仍然是可以的。 - 你的第二个参数是
int *
,它有相同的问题,没有指向有效的内存。
所以,你的程序可能调用了未定义的行为。
我将把您的初始化更改为:
uint8_t *data[4];
int linesize[4];
然后调用ff_load_image
作为:
int i = ff_load_image(data, linesize, &width, &height, &pix_fmt,
filename, &log_ctx);
另外,您可能想要查看如何使用ff_load_image
的示例。