Какой самый простой способ превратить массив значений RGB в C ++ в файл изображения? - PullRequest
4 голосов
/ 27 сентября 2011

Я искал во всей сети хорошее и быстрое решение этой проблемы и пока не нашел ничего, что бы меня удовлетворило.Кажется, что это должно быть тривиально - просто один или два вызова функции в какой-то библиотеке и все - но это не так.libjpeg и libtiff не хватает хорошей документации, а выложенные людьми решения включают понимание того, как создается изображение, и написание ~ 50 строк кода.Как бы вы, ребята, сделали это в C ++?

Ответы [ 3 ]

6 голосов
/ 27 сентября 2011

Если вы хотите «простой» по сравнению с чем-либо еще, взгляните на stb_image_write.h .

Это один заголовочный файл, который включает поддержку записи BMP, PNG иTGA файлы.Просто один звонок для каждого формата:

 int stbi_write_png(char const *filename, int w, int h, int comp, const void *data, int stride_in_bytes);
 int stbi_write_bmp(char const *filename, int w, int h, int comp, const void *data);
 int stbi_write_tga(char const *filename, int w, int h, int comp, const void *data);
3 голосов
/ 27 сентября 2011

Самый простой способ - сохранить его как изображение Netpbm .Предполагая, что ваш массив упакован в 24 бита на пиксель без отступов между пикселями, вы можете записать супер-простой заголовок, за которым следуют двоичные данные.Например:

void save_netpbm(const uint8_t *pixel_data, int width, int height, const char *filename)
{
    // Error checking omitted for expository purposes
    FILE *fout = fopen(filename, "wb");

    fprintf(fout, "P6\n%d %d\n255\n", width, height);
    fwrite(pixel_data, 1, width * height * 3, fout);

    fclose(fout);
}
0 голосов
/ 27 сентября 2011

В моей библиотеке Graphin вы можете найти простую функцию:

bool EncodeJPGImage(image_write_function* pctl, void* streamPrm, unsigned width, unsigned height, unsigned char** rows, unsigned bpp, unsigned quality)

, который делает это преобразование. Смотри http://code.google.com/p/graphin/source/browse/trunk/src/imageio.cpp#412

Библиотека: http://code.google.com/p/graphin/

...