[M1 Mac, MacOS Ventura 13.3.1, clang 14.0.3]
画像加工アプリにpngのチャンネル数を取得する機能を追加しました。libpngを使います。
RGBAであれば4、アルファチャンネルのないRGBであれば3になります。
unsigned int width;
unsigned int height;
unsigned int res_x;
unsigned int res_y;
unsigned int readSize;
unsigned int channel;
std::array<int,5> getInfoPNG(const char* filename){
fi = fopen(filename, "rb");
readSize = fread(signature, 1, SIGNATURE_NUM, fi);
png = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
info = png_create_info_struct(png);
png_init_io(png, fi);
png_set_sig_bytes(png, readSize);
png_read_png(png, info, PNG_TRANSFORM_PACKING | PNG_TRANSFORM_STRIP_16, NULL);
width = png_get_image_width(png, info);
height = png_get_image_height(png, info);
res_x = png_get_x_pixels_per_inch(png,info);
res_y = png_get_y_pixels_per_inch(png,info);
channel = png_get_channels(png, info);
png_destroy_read_struct(&png, &info, NULL);
fclose(fi);
return {(int)width,(int)height,(int)res_x,(int)res_y, (int)channel};
}