Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Формат Bmp


Автор: Ak47black 27.10.2006, 20:00
Изучаю Bmp формат.
Сам принцип хранения двухцветного (Monocrome) ресунка мне понятен.
Проблемма заключается в следушем - как считывать по bitам, так как там пиксель 0 - черный 1 - белый.

Автор: Albinos_x 27.10.2006, 20:44
статью по ссылке в прошлой теме читал?

Автор: Ak47black 27.10.2006, 20:57
Читал. Сам принцип понимаю что, где, как находиться.
Если изображение 24 битовое то считываю и выважу на ура.
Но если он двухцветного (Monocrome), то как мне считать.
Тоесть там один бит содержит цвет (черный или белый) ,а как мне это на дельфи проделать?
Byte считать нету проблем , а как , bit у меня возникла проблемма  smile 

Автор: Albinos_x 27.10.2006, 21:25
Цитата

1 - монохромное изображение (поддерживается всеми версиями). Каждый пиксель представлен одним битом данных, т.е. один байт содержит информацию о цвете 8 последовательно идущих пикселей. Цвет первого пикселя определяется состоянием старшего бита первого байта (и так далее), если его значение равно единице, то цвет пикселя будет определяться первой записью таблицы цветов (считается от нуля). Вообще значение цвета определяется по RGB (для BI_RGB версии) составляющим, таблицы цветов, по индексу. 


в принципе никаких проблем не вижу...

читаешь байт, делишь на биты...
 к примеру так:
Код

bit:=byte_  mod 2;


Автор: Ak47black 28.10.2006, 00:01
Цитата(Albinos_x @ 27.10.2006,  21:25)
Читаешь байт, делишь на биты...
 к примеру так:
Код

bit:=byte_  mod 2;


Вы имеете в виду из Hex перевести в Bin ?

Автор: KDenisK 28.10.2006, 00:09
Цитата(Ak47black @ 28.10.2006,  00:01)
Вы имеете в виду из Hex перевести в Bin ?

Ага. Но такую фишку оптимально на асме проделать.

Автор: Ak47black 28.10.2006, 10:24
Цитата(KDenisK @ 28.10.2006,  00:09)
Цитата(Ak47black @ 28.10.2006,  00:01)
Вы имеете в виду из Hex перевести в Bin ?

Ага. Но такую фишку оптимально на асме проделать.

Можете какие-нибудь наброски дать ?  smile 

Автор: Albinos_x 28.10.2006, 10:24
Цитата(Ak47black @  28.10.2006,  00:01 Найти цитируемый пост)
Вы имеете в виду из Hex перевести в Bin ?

в компе число и так Bin, но прочитао-то ты 8 Bin в одну переменную, нам надо знать состояние каждого Bin... следовательно первый справа будет
Код

bit:=byte_  mod 2;

следующий:
Код

byte_:=byte_ shr 1;  // или byte_ div 2
bit:=byte_  mod 2;


можно конечно к этому вопросу и так подойти:
первый слева(8 разряд):
Код

bit:=ord((byte_  and 128) = 128);

7 разряд
Код

bit:=ord((byte_  and 64) = 64);

6 разряд
Код

bit:=ord((byte_  and 32) = 32);

5 разряд
Код

bit:=ord((byte_  and 16) = 16);

и т.д.
4
Код

bit:=ord((byte_  and 8) = 8);

3
Код

bit:=ord((byte_  and 4) = 4);

2
Код

bit:=ord((byte_  and 2) = 2);

1
Код

bit:=(byte_  and 1);

Автор: Ak47black 28.10.2006, 11:38
Albinos_x Спасибо большое, это то что я хотел узнать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)