Расскажите как устроен BMP-файл [вопрос по C++]
независимо от ОС, там идут по три байта на точку(RGB) c правого нижнего угла. Гуглить лень, по памяти со спецкурса Сухаревой говорю. Но, думаю, очень просто найтись должно 

http://web.uccs.edu/wbahn/ECE1021/STATIC/REFERENCES/bmpfilef...
http://atlc.sourceforge.net/bmp.html
по-русски - http://jenyay.wallst.ru/index.php?id=bmp
http://atlc.sourceforge.net/bmp.html
по-русски - http://jenyay.wallst.ru/index.php?id=bmp
Например вот: http://pascal.sources.ru/articles/099.htm
Если будешь писать на С, не забудь #pragma pack 1 выставить, иначе не получиться
Если будешь писать на С, не забудь #pragma pack 1 выставить, иначе не получиться
клево, только жалко на C++ примеров нет
спасибо
Могу дать класс, который я писал три года назад на машграф.
Стопудоф машграф у многих остался.
Я тож в bmp рендерил, но оно все не на работе ессно
Я тож в bmp рендерил, но оно все не на работе ессно

Клёво, я с котами разговариваю.
У меня всё тут осталось. Так что если что - обращайтесь.
У меня всё тут осталось. Так что если что - обращайтесь.
Расшарь если это возможно.
P.S. В принципе я почитал то, что выложил. По этому материалу я думаю смогу написать.
P.S. Главная загвоздка: я не понимаю как можно на этапе создания файла закладывать размер этого файла, сдвиги в байтах внутри этого файла и прочее.
P.S. В принципе я почитал то, что выложил. По этому материалу я думаю смогу написать.
P.S. Главная загвоздка: я не понимаю как можно на этапе создания файла закладывать размер этого файла, сдвиги в байтах внутри этого файла и прочее.
Если ты знаешь размер картинки, то размер файла вычисляется автоматом как [размер заголовка] + 3*[число пикселей]
З.Ы. А поскольку я довольно ленив, я в свое время не стал париться заполнением заголовка BMP, а взял заголовок существующего файла и прицеплял его ко всем своим картинкам, благо размер у всех картинок был один и тот же - 640х480.
З.Ы. А поскольку я довольно ленив, я в свое время не стал париться заполнением заголовка BMP, а взял заголовок существующего файла и прицеплял его ко всем своим картинкам, благо размер у всех картинок был один и тот же - 640х480.
там практически стандарт - вроде 54 на шапку, 4*кол-во цветов на палитру (если она нужна) и на растр с учётом того, что
24бита - это всё-таки 4 байта (один пустой) и длина строки (в байтах, а не пикселах) должна быть кратна 4-м (хотя может, этого уже не требуется
то есть если у тебя 1 байт на цвет то должно быть от 0 до 3-х пустых байт в конце каждой строки. если 2 - то 0 или 2. С кол-вом цветов < 256 не работал - ничего ен могу сказать.
24бита - это всё-таки 4 байта (один пустой) и длина строки (в байтах, а не пикселах) должна быть кратна 4-м (хотя может, этого уже не требуется
то есть если у тебя 1 байт на цвет то должно быть от 0 до 3-х пустых байт в конце каждой строки. если 2 - то 0 или 2. С кол-вом цветов < 256 не работал - ничего ен могу сказать.
[размер заголовка] + 3*[число пикселей] - вот по поводу этого я как раз не уверен.
раньше нужно было 4*[число пикселей].
Проверил - был не прав
раньше нужно было 4*[число пикселей].
Проверил - был не прав
Эта формула верна только для полноцветных бмп-шек.
Я так понимаю, что есть два различнных беспалитровых формата - в одном пиксел представляется тремя байтами, в другом - четырьмя. У меня, кажется, было именно 3, но точно не вспомню - слишком давно это было.
Ну да. Они самые простые на мой взгляд, поэтому выгодно использовать именно их.
А уж как они архиваторами сжимаются
А уж как они архиваторами сжимаются

Сделать это надо без использования классов MFC, потому что программа должна быть именно консольной.А что, стандартные библиотеки не дают записать картинку в графический файл, не выводя её на экран?

Это точно. Как-то пытался с 256-цветными возиться, было немного сложнее.
А что касается того, как узнать размер - вот кусок моего исходника:
А что касается того, как узнать размер - вот кусок моего исходника:
class RGBc
{
public:
unsigned char b, g, r;
...
};
...
struct BMPFILEHEADER bfh;
struct BMPINFOHEADER bih;
...
bfh.bfSize = Width * Height * sizeof(RGBc) + sizeof(bfh) + sizeof(bih);
...
ну всё, работает
Добрый вечер, вендузятнечег!
Если бы твой мозг не был заражен неизлечимо виндузятским стилем мышления, ты бы просто спросил, чем можно создавать bmp. Спросил бы без расплывчатых и несвязных рассуждений, без упоминания ни MFC (оно-то каким боком сюда?). Кстати, весьма показательно, что программа консольная — наверное, для вас это такой же удивительный факт как и розовый негр.
Итак, чем можно создавать bmp?
Ответ: bmp, впрочем как и gif/png/jpeg можно создавать библиотекой gd. Замечу, что она свободная, и даже под винду собрана. Вот ссылка:
http://www.boutell.com/gd/
Пользуйся на здроровье, познавай красивый мир открытого ПО.
Если бы твой мозг не был заражен неизлечимо виндузятским стилем мышления, ты бы просто спросил, чем можно создавать bmp. Спросил бы без расплывчатых и несвязных рассуждений, без упоминания ни MFC (оно-то каким боком сюда?). Кстати, весьма показательно, что программа консольная — наверное, для вас это такой же удивительный факт как и розовый негр.
Итак, чем можно создавать bmp?
Ответ: bmp, впрочем как и gif/png/jpeg можно создавать библиотекой gd. Замечу, что она свободная, и даже под винду собрана. Вот ссылка:
http://www.boutell.com/gd/
Пользуйся на здроровье, познавай красивый мир открытого ПО.
Жжжешь 
2автор: как вариант можешь рассмотреть библиотеку CImg для обработки изображений. Сохранять bmp, в частности, она умеет. Представляет собой один файл cimg.h, который подключается к твоему проекту - и все. Кросс-платформенная и свободная, чего так жаждет .
Для сохранения картинки надо что-то вроде
2автор: как вариант можешь рассмотреть библиотеку CImg для обработки изображений. Сохранять bmp, в частности, она умеет. Представляет собой один файл cimg.h, который подключается к твоему проекту - и все. Кросс-платформенная и свободная, чего так жаждет .
Для сохранения картинки надо что-то вроде
using namespace cimg;
Image<unsigned char> img(width, height, 1, 3); // Трехцветная двумерная картинка заданных размеров
// Заполняешь картинку пикселами
cimg_mapXY(img, x, y)
{
img(x, y, 0, 0) = 255; // Красный
img(x, y, 0, 1) = 128; // Зелёный
img(x, y, 0, 2) = 0; // Синий
}
img.save("MyImage.bmp"); // Сохранить картинку. Тип определяется по расширению (bmp, gif, еще что-то)
Вы ещё ImageMagick посоветуйте, вдруг человек купится на пианистовский треш 

А зачем ImageMagick, если нужна gd?
---
...Я работаю антинаучным аферистом...
---
...Я работаю антинаучным аферистом...
Оно _открытее_ вроде бы 

Remember, gd is open source; we answer gd questions on a volunteer basis, as time permits. If your question is about Perl or PHP or another language, we don't necessarily know the answer (although we will be glad to find it for you on a paid-support basis)
Вот уроды

Тема закрыта.
Оставить комментарий
Yulka-MOl
Всем доброго времени суток,Тема следующая:
Есть консольная программа, результат её работы - матрица чисел типа byte размера M x N.
Было бы очень удобно результат выводить в стандартный BMP файл.
Сделать это надо без использования классов MFC, потому что программа должна быть именно консольной.
Расскажите плз [дайте ссылку] как устроен простейший несжатый bmp файл в Windows и пару примеров на C++ если не трудно.
Заранее спасибо.