[c++] libpng 이미지 포맷

libpng는 PNG (Portable Network Graphics) 이미지 포맷을 생성하고 처리하기 위한 라이브러리입니다. 여기에는 이미지의 압축, 해제, 디코딩, 인코딩 등을 수행할 수 있는 기능이 포함되어 있습니다.

libpng 라이브러리 설치

libpng 라이브러리를 사용하기 위해서는 해당 라이브러리를 설치해야 합니다. 대부분의 리눅스 배포판에는 패키지 매니저를 통해 간편하게 설치할 수 있습니다.

sudo apt-get install libpng-dev # Debian/Ubuntu
sudo yum install libpng-devel # CentOS/RHEL

Windows에서는 libpng 공식 웹사이트에서 바이너리로 제공되며, 다운로드 후 직접 설치할 수 있습니다.

libpng를 이용한 이미지 처리

libpng를 사용하여 이미지를 처리하는 간단한 예제를 통해 기본적인 사용법을 살펴보겠습니다. 아래는 PNG 이미지를 읽어와서 화면에 픽셀값을 출력하는 간단한 C++ 코드입니다.

#include <png.h>
#include <stdio.h>
#include <stdlib.h>

void read_png_file(char *filename) {
   FILE *fp = fopen(filename, "rb");
   png_structp png = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
   png_infop info = png_create_info_struct(png);
   png_init_io(png, fp);
   png_read_info(png, info);
   
   int width = png_get_image_width(png, info);
   int height = png_get_image_height(png, info);
   png_byte color_type = png_get_color_type(png, info);
   png_byte bit_depth = png_get_bit_depth(png, info);
   
   // Pixel value 출력
   int x, y;
   png_bytep *row_pointers = png_get_rows(png, info);
   for (y = 0; y < height; y++) {
      for (x = 0; x < width; x++) {
         // 각 픽셀의 RGBA값 출력
         printf("(%d,%d) - R:%u, G:%u, B:%u, A:%u\n", x, y, row_pointers[y][x*4], row_pointers[y][x*4+1], row_pointers[y][x*4+2], row_pointers[y][x*4+3]);
      }
   }
   
   fclose(fp);
}

int main() {
   read_png_file("example.png");
   return 0;
}

이 예제에서는 libpng를 사용하여 PNG 이미지 파일을 열고 각 픽셀의 RGBA값을 출력하는 방법을 보여줍니다.

마무리

libpng 라이브러리는 강력하고 유연한 기능을 제공하며, 이미지 처리 및 관리에 널리 사용됩니다. 위 예제를 통해 간단히 이미지를 읽고 처리하는 방법을 살펴봤지만, libpng는 다양한 기능과 옵션을 제공하므로 실제 프로젝트에서는 더 많은 기능을 활용할 수 있습니다.

더 자세한 내용은 libpng 공식 웹사이트에서 확인할 수 있습니다.