[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 공식 문서를 참고하시기 바랍니다.