#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <png.h>
#define pngFilePath "xxx.png"
int main(void)
{
FILE *fp_read = fopen(pngFilePath, "rb");
png_structp png_read = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
png_infop infop_read = png_create_info_struct(png_read);
png_init_io(png_read, fp_read);
png_read_png(png_read, infop_read, PNG_TRANSFORM_EXPAND, 0);
// PNG_COLOR_TYPE_RGB_ALPHA
int color_type = png_get_color_type(png_read, infop_read);
printf("color_type:%d\n", color_type);
int w = png_get_image_width(png_read, infop_read);
int h = png_get_image_height(png_read, infop_read);
printf("w:%d, h:%d\n", w, h);
png_bytep buff = (png_bytep)malloc(h * w * 3 * sizeof(png_byte));
memset(buff, 0, (h * w * 3 * sizeof(png_byte)));
png_bytep *row_pointers = png_get_rows(png_read, infop_read);
switch (color_type)
{
case PNG_COLOR_TYPE_RGB_ALPHA:
{
int i, j;
for (i = 0; i < h; i ++)
{
for (j = 0; j < w; j ++)
{
buff[i * w + 3 * j + 0] = row_pointers[i][3 * j + 0];
buff[i * w + 3 * j + 1] = row_pointers[i][3 * j + 1];
buff[i * w + 3 * j + 2] = row_pointers[i][3 * j + 2];
}
}
break;
}
default:
break;
}
return 0;
}
libpng读写png图片
最新推荐文章于 2023-09-23 16:25:00 发布