각 픽셀의 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);

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.