Как я говорил, примемся уже конкретно создавать свой гр. файл. Будем писать простой
конвертер для BMP(8;24) и TGA(8;24). 8=256 оттенков цветов, 24=16 млн. оттенков
цветов. Наш формат будет содержать 16 млн. оттенков цветов. В 8 битном(256 оттенков
цветов) режиме каждый пиксел есть индекс-значение в палитре цветов, размером в
768=256*3 байт. В 15 битном режиме(32 тыс.) цвет представлен следующим образом:
rrrrr ggggg bbbbb
где r-бит красного цвета(Red), g-бит зеленого цвета(Green), b-бит синего цвета (Blue).
В 16 битном режиме(65 тыс.) к пяти битам зеленого добавляется еще один бит:
rrrrr gggggg bbbbb
В режиме 24 бита(16 млн.), каждый цвет задан восьмью битами:
rrrrrrrr gggggggg bbbbbbbb
Может ко всем режимам добавляться еще Alpha канал или канал прозрачности.
Размером обычно в 8 бит, хотя некто не ограничивает этим значением. 256 оттенков
обычно хватает. Например, для 24 бит, правда, нужно называть уже 32 битным режимом:
rrrrrrrr gggggggg bbbbbbbb aaaaaaaa
на один пиксел 32 бита, картинка размером 800x600 будет иметь размер
800*600*32= 15 360 000 байт. 15 мигов неправда ли много? Можно, конечно сжать.
Ну да ладно! Приложение будет консольным(пример тупой, много памяти надо, но
на то он и пример, на основе сделайте гораздо лучше).
 Один глоб. указатель на всю картинку, где каждые три элемента RGB. Два
файла bmp.h и tga.h. Соответственно читать из bmp и tga. Для 24 бит все просто,
грузим его прямо в указатель:
 Функции типа isBmp(in) и isTga(in) проверяют, является ли in нужным нам форматом.
ConvertFromBmp(in) и ConvertFromTga(in)-загружают из файла в наш буфер-указатель.
Теперь есть размер картинки и буфер содержащий RGB последовательность, т.е.