让我们看一下原型和描述png_set_rows
void png_set_rows(png_structp png_ptr,
png_infop info_ptr,
png_bytepp row_pointers);
png_set_rows() 将图像数据行放入 info_ptr 结构中,其中 row_pointers 是指向每行像素数据的指针数组。
我将假设您已经初始化 apng_stuctp
作为第一个参数传递,并且您有一个空png_infop
的作为第二个参数传递。
所以你的问题是作为第三个参数传入什么。
好吧,让我们看一下 png_byte 的定义:
typedef unsigned char png_byte;
太好了, png_byte 是一个无符号字符。
现在让我们看一下 png_bytepp 的定义:
typedef png_byte FAR * FAR * png_bytepp;
它是无符号字符的二维数组。
因此,您所要做的就是创建一个 2D 无符号字符数组并将其转换为 png_bytepp:
unsigned int IMAGE_HEIGHT = 720, IMAGE_WIDTH = 1280;
unsigned char row_pointers[IMAGE_HEIGHT][IMAGE_WIDTH];
/* test image initialization */
unsigned int i, j;
for (i = 0; i < IMAGE_HEIGHT; i++) {
for (j = 0; j < IMAGE_WIDTH; j++) {
row_pointers[i][j] = i * j;
}
}
png_set_rows(png_ptr, info_ptr, (png_bytepp)row_pointers);