[c++] libpng 저장하기
libpng는 PNG 이미지를 생성하고 처리하기 위한 라이브러리입니다. 이미지 데이터를 libpng을 사용하여 PNG 파일로 저장하는 방법은 다음과 같습니다.
#include <png.h>
void write_png_file(const char* file_name, int width, int height,
const uint8_t* image_data, int bit_depth, int color_type) {
FILE *fp = fopen(file_name, "wb");
if (!fp) {
// 파일 열기에 실패한 경우 에러 처리
return;
}
png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (!png_ptr) {
// png_struct 생성에 실패한 경우 에러 처리
fclose(fp);
return;
}
png_infop info_ptr = png_create_info_struct(png_ptr);
if (!info_ptr) {
// png_info 생성에 실패한 경우 에러 처리
png_destroy_write_struct(&png_ptr, NULL);
fclose(fp);
return;
}
if (setjmp(png_jmpbuf(png_ptr))) {
// png_jmpbuf 설정에 실패한 경우 에러 처리
png_destroy_write_struct(&png_ptr, &info_ptr);
fclose(fp);
return;
}
png_init_io(png_ptr, fp);
png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth, color_type, PNG_INTERLACE_NONE,
PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
png_bytep row_pointers[height];
for (int y = 0; y < height; y++) {
row_pointers[y] = (png_bytep)(image_data + (y * width * 4));
}
png_set_rows(png_ptr, info_ptr, row_pointers);
png_write_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, NULL);
png_destroy_write_struct(&png_ptr, &info_ptr);
fclose(fp);
}
위 코드에서 write_png_file
함수는 PNG 파일로 이미지 데이터를 저장하는 함수입니다. 함수에는 파일 이름, 이미지의 폭과 높이, 이미지 데이터의 비트 깊이와 색상 타입이 전달됩니다.
이제 libpng를 사용하여 이미지를 저장하는 방법을 확인했습니다. 더 많은 내용은 libpng 공식 문서를 참고하시기 바랍니다.