[c++] libpng 프로그래밍
libpng는 PNG(Portable Network Graphics) 이미지 포맷을 다루기 위한 라이브러리로, 이미지를 읽고 쓰는 기능을 제공합니다.
libpng 설치
libpng를 설치하려면 디렉토리 내에서 아래의 명령어를 실행합니다:
sudo apt-get install libpng-dev
이미지 읽기
libpng를 사용하여 이미지를 읽는 예제 코드는 다음과 같습니다:
#include <stdio.h>
#include <png.h>
void read_png_file(char *filename) {
png_byte header[8];
FILE *fp = fopen(filename, "rb");
fread(header, 1, 8, fp);
if (png_sig_cmp(header, 0, 8)) {
fclose(fp);
// 에러 처리
}
png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (!png_ptr) {
fclose(fp);
// 에러 처리
}
png_infop info_ptr = png_create_info_struct(png_ptr);
if (!info_ptr) {
png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
fclose(fp);
// 에러 처리
}
png_init_io(png_ptr, fp);
png_set_sig_bytes(png_ptr, 8);
png_read_info(png_ptr, info_ptr);
int width = png_get_image_width(png_ptr, info_ptr);
int height = png_get_image_height(png_ptr, info_ptr);
png_byte color_type = png_get_color_type(png_ptr, info_ptr);
png_byte bit_depth = png_get_bit_depth(png_ptr, info_ptr);
// 이미지 처리
fclose(fp);
}
이미지 쓰기
libpng를 사용하여 이미지를 쓰는 예제 코드는 다음과 같습니다:
#include <stdio.h>
#include <png.h>
void write_png_file(char *filename, int width, int height, png_byte color_type, png_byte bit_depth) {
FILE *fp = fopen(filename, "wb");
if (!fp) {
// 에러 처리
}
png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (!png_ptr) {
fclose(fp);
// 에러 처리
}
png_infop info_ptr = png_create_info_struct(png_ptr);
if (!info_ptr) {
png_destroy_write_struct(&png_ptr, (png_infopp)NULL);
fclose(fp);
// 에러 처리
}
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_write_info(png_ptr, info_ptr);
// 이미지 처리
png_write_end(png_ptr, NULL);
fclose(fp);
}
위 코드는 libpng를 사용하여 이미지를 읽고 쓰는 기본적인 방법을 보여줍니다. 물론 복잡한 이미지 처리를 위해서는 추가적인 기능을 사용해야 합니다.
참고 자료
- libpng 공식 웹사이트: libpng.org