[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 공식 웹사이트에서 확인할 수 있습니다.