Каков самый простой формат изображения RGB?

Я работаю в C на физическом эксперименте, эксперименте интерференции Янга, и я создал программу, которая печатает для создания огромного количества пикселей:

 for (i=0; i < width*width; i++) { fwrite(hue(raster_matrix[i]), 1, 3, file); } 

Где hue , когда задано значение [0..255], возвращает char * с 3 байтами, R, G, B.

Я хотел бы поместить минимальный заголовок в свой файл изображения, чтобы сделать этот необработанный файл действительным файлом изображения.

Более краткий: переход от:

 offset 0000 : height * width : data } my data, 24bit RGB pixels 

в

 offset 0000 : dword : magic \ : /* ?? */ \ 0012 : dword : height } Header  common image file 0016 : dword : width / : /* ?? */ / 0040 : height * width : data } my data, 24bit RGB pixels 

Спасибо.

Вероятно, вы захотите использовать формат PPM, который вы ищете: минимальный заголовок, за которым следует необработанный RGB.

Недавно созданный формат farbfeld довольно минимален, хотя его не так много программного обеспечения (по крайней мере, до сих пор).

TARGA (расширение имени файла .tga ) может быть простейшим широко поддерживаемым форматом файла двоичного файла, если вы не используете сжатие и не используете никаких его расширений. Это даже проще, чем файлы Windows .bmp и поддерживается ImageMagick и многими программами рисования. Это был мой формат, когда мне просто нужно выводить некоторые пиксели из одноразовой программы.

Вот минимальная программа C для генерации изображения для стандартного вывода:

 #include  #include  enum { width = 550, height = 400 }; int main(void) { static unsigned char pixels[width * height * 3]; static unsigned char tga[18]; unsigned char *p; size_t x, y; p = pixels; for (y = 0; y < height; y++) { for (x = 0; x < width; x++) { *p++ = 255 * ((float)y / height); *p++ = 255 * ((float)x / width); *p++ = 255 * ((float)y / height); } } tga[2] = 2; tga[12] = 255 & width; tga[13] = 255 & (width >> 8); tga[14] = 255 & height; tga[15] = 255 & (height >> 8); tga[16] = 24; tga[17] = 32; return !((1 == fwrite(tga, sizeof(tga), 1, stdout)) && (1 == fwrite(pixels, sizeof(pixels), 1, stdout))); }