формат BMP
Помогите, пожалуйста, решить такую проблему - надо из BMPфайла получить информацию о длине и высоте изображения и матрицу яркости пикселей.Заранее спасибо.
[email]londinium@rambler.ru[/email]
надо из BMPфайла получить информацию о длине и высоте изображения и матрицу яркости пикселей
Я как-то копался в BMP-файлах. Только это были 24-битные BMP. Там все просто. Имеется шапка файла (всего 54 байта, кажется), в ней хранятся ширина и высота картинки (их смещение в шапке можно найти экспериментально, за 2 попытки). А тело BMP записано как массив значений RGB. Только, кажется, задом-наперед. Массив (кажется) начинался с правой нижней точки изображения.
Все гораздо сложнее, если это, например, 8-bit BMP с палитрой. А если к тому же и compressed...
Здесь найдешь ссылку на описание формата BMP:
http://sources.codenet.ru/index.php?path=formtfil/0-9_a-c
Господа!
Помогите, пожалуйста, решить такую проблему - надо из BMPфайла получить информацию о длине и высоте изображения и матрицу яркости пикселей.Заранее спасибо.
Мммм... Поподробнее можно? Что есть матрица яркости пикселей? Может быть ты растр имеешь ввиду?
А касаемо BMP...
Есть в билдере такой класс Graphics::TBitmap - он как раз и предназначен для работы с BMP изображениями - поддерживает все форматы BMP - 1,4,8,16,24 и 32 бита.
Для 16 бит понимает форматы 555 и 565.
Умеет работать со сжатыми изображениями.
Умеет сохранять и загружать файлы.
Дает доступ ко всем параметрам изображения, включая сам растр.
Вот пример:
#include <graphics.hpp>
Graphics::TBitmap *_bmp;
void __fastcall TForm1::bmp_test(void)
{
_bmp=new Graphics::TBitmap();
_bmp->LoadFromFile("test.bmp");
_bmp->Width // ширина изображения
_bmp->Height // высота изображения
_bmp->PixelFormat // глубина цвета
_bmp->Palette
// палитра изображения только для 4 и 8 битных
// изображений.
_bmp->ScanLine[index]
// массив скан-лайнов растра изображения.
// хотя битмапы действительно перевернуты,
// ScanLine работает в нормальной координатной
// системе - тобишь сверху вниз.
// Поэтому ScanLine[0] вернет void указатель
// на скан-линию с y координатой 0. И.т.д.
Canvas->Draw(0,0,_bmp);
// А вот так можно вывести битмапку на экран - в
// данном случае она будет выведена в канву
// TForm1 в координаты 0,0.
delete _bmp;
}
Вобщем весьма полезный класс и пользоваться им весьма удобно. К тому же, дает тебе возможность работы с растром изображения как с обычной канвой - класс TCanvas - тобишь можешь рисовать в битмапку обычными функциями графического вывода класса TCanvas.
Подробнее смотри хелп по TBitmap.
Всем огромное спасибо
[email]londinium@rambler.ru[/email]