我在尝试修改示例代码时遇到了问题。示例代码非常简单,它使用curl_easy_handle不断从服务器获取一些.png文件。然后它从libpng调用read_png_file()函数来读取下载的图像。
现在我正在尝试使用curl_multi API同时获取多个图像来修改此程序。我可以成功下载图像,但是当我调用read_png_file()时,它将返回“输入未被识别为PNG文件”的错误。
原始程序采用如下输入:
png_bytep input_buffer = malloc(sizeof(png_byte)*BUF_SIZE);
struct bufdata bd;
bd.buf = input_buffer;
png_structp png_ptr;
png_infop info_ptr;
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
然后通过以下方式调用该函数:
png_bytep* row_pointers = read_png_file(png_ptr, &info_ptr, &bd);
我现在拥有的是:
png_structp png_ptr;
png_infop info_ptr;
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
png_bytep input_buffer[num_threads];
struct bufdata bd[num_threads];
for (int i=0; i<number; i++){
input_buffer[i] = malloc(sizeof(png_byte)*BUF_SIZE);
bd[i].buf = input_buffer[i];
}
然后我调用函数:
png_bytep* row_pointers = read_png_file(png_ptr, &info_ptr, &bd[i]);
然后在read_png_file()函数中,它将在此行失败:
if (png_sig_cmp(bd->buf, 0, 8))
abort_("[read_png_file] Input is not recognized as a PNG file");
所以我假设输入&amp; bd [i]错了,有谁知道这里出了什么问题?我已经确认bd-&gt; buf和input_buffer的对应地址实际上是相同的。
任何帮助将不胜感激,提前谢谢!