Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Кто знает формат .bmp, помогите


выарп ©   (2003-08-24 17:52:00) 

//Специально для wl ©

Хочу отобразить .bmp файл на форме (ни какой практической цели этим не преследую).
Но вот не получается. Цвета не всегда (не для всякой бэ-эм-пэшки) правильно отображаются. Объясните, пожалуйста, что не так.

program Project1;
uses
Forms,
Unit1 in "Unit1.pas" {Form1};
{$R *.RES}
begin
assign(bmpfile, "file.bmp");
reset(bmpfile,1);
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
Close(bmpfile);
end.
//----------------
unit Unit1;
...
var
...
bmpfile: file;
buff: array[1..3072] of char;
numread, i: integer;
bmpwidth, bmpheight, x, y: integer;
...
procedure TForm1.Button1Click(Sender: TObject);
begin
blockread(bmpfile, buff, sizeof(buff));
bmpwidth:=ord(buff[19])+ord(buff[20])*256+ord(buff[21])*256*256+ord(bu ff[22])*256*256*256;
bmpheight:=ord(buff[23])+ord(buff[24])*256+ord(buff[25])*256*256+ord(b uff[26])*256*256*256;
seek(bmpfile, 54);
x:=1; y:=bmpheight; i:=0;
repeat
blockread(bmpfile, buff, sizeof(buff), numread);
repeat
canvas.Pixels[x,y]:=ord(buff[1+i*3])+ord(buff[2+i*3])*256+ord(buff[3+i *3])*256*256;
inc(i);
inc(x);
if x>bmpwidth then begin x:=1; inc(y,-1) end;
until i=1024;
i:=0;
until numread=0;
end;


panov   (2003-08-25 12:23:00) [1]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1061653740&n=3


jel   (2003-08-25 09:55:00) [2]

В справке по WinApi посмотри описание структуры BITMAPINFOHEADER. В твоем случае правильно будут отображаться только файлы с определенной глубиной цвета (biBitCount = 24 бита), а ведь могут быть еще и другие значения.


NightAngel   (2003-08-24 21:09:00) [3]

Может быть я и ошибаюсь, но на первый взгляд... BMP-файлы могут хранить сжатое изображение, используя технику группового кодирования. Где-то в заголовке есть dword указывающий, хранится ли данное растровое изображение в сжатом виде, а также метод его упаковки. Не могут быть сжаты только монохромные и полноцветные (true color) изображения. Точнее сказать не могу, т.к. под рукой нет описания формата BMP. Может быть в этом причина? Возможно, что я и ошибаюсь и причина не в этом. Разбираться более детально желания нет.


Наверх

Титульная страница Поиск, карта сайта Написать письмо