각 픽셀의 RGB 데이타를 이미지파일(ex. bmp, png 등)로 만들어주는 라이브러리 추천 부탁드립니다.

vudghkzm의 이미지

어떤 이미지의 가로와 세로 크기를 이미 알고 있습니다. 그리고 이 이미지의 각 픽셀의 RGB값도 이미 알고 있습니다. 이 상태에서 이 이미지를 bmp파일이나 png파일등 현재 널리 쓰이는 이미지파일로 만들어주는 C 또는 python용 라이브러리가 있다면 어떤게 있을까요? 이왕이면 작고 가벼우면 좋겠습니다.

예를 들어, bmp파일을 만들어주는 함수가 있다면...

void MakeBMP(int width, int height, char *pixels, char *filename)

뭐 위와 비슷한 형식의 함수가 제공되는 라이브러리를 찾고 있습니다. 굳이 위와 같이 하나의 함수로 제가 원하는 작업을 한번에 해줄 필요는 없고, 몇 단계로 나뉘어져도 괜찮습니다.

사실 bmp 파일 포맷이 간단해서, 직접 헤더만들어서 bmp파일을 만들고 있는데.. 이상하게 잘 안되네요. ^^;;; 그래서 왠지 간단한 라이브러리가 이미 있을 듯 해서 질문드려보네요.

ydgoo의 이미지


냉무

unsouled의 이미지

PPM 인가 PBM 인가 하는 이미지 포맷이 가로와 세로 그리고 pixmap 이 그냥 일반 텍스트(plain text)로 저장되어 있는 형태 인걸로 기억합니다.
가로,세로,RGB 정보를 알고 있으면 그걸 PPM 포맷으로 쓰고 그 PPM 파일을 BMP 로 저장하면 될 것 같네요.

image magick(PyMagick)도 지원하고, PPM, BMP 이 두가지를 지원하는 이미지 컨버터를 찾으면 많이 나올 것 같습니다.

ps. 번거롭게 이럴 필요 없이 이런 거( http://code.google.com/p/libbmp/ ) 쓰셔도 되겠네요.

Prentice의 이미지

vudghkzm의 이미지

답변 주신 모든 분들 감사합니다.

알려주신 netpbm, libgd, libbmp 중에서 netpbm을 사용하기로 하였습니다.
우분투 9.10에 기본 포함된 패키지이고, 가볍다고 판단되었기 때문입니다.

alee의 이미지

이미 결정하신 듯 하지만 저는 개인적으로 libpng를 추천합니다.

#include <png.h>
 
FILE *file = fopen("filename.png", "wb");
png_byte pixels[height][width*3];
 
png_structp png = png_create_write_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0);
png_infop info = png_create_info_struct(png);
png_init_io(png, file);
png_set_compression_level(png, Z_BEST_COMPRESSION);
png_set_IHDR(png, info, width, height, 8,
    PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
png_write_info(png, info);
png_write_image(png, pixels);
png_write_end(png, info);
png_destroy_write_struct(&png, 0);
fclose(file);