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

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

Разбираю пример...


Yanis ©   (2006-01-21 17:39:00) 

на OpenGL из книги М. Краснова. Ch2 Ex43. Там приводится пример загрузки битмапа. Код такой:
procedure TfrmGL.MakeImage;
var
 i, j: Integer;
 PixCol: TColor;
 Bitmap: TBitmap;
begin
 Bitmap := TBitmap.Create;
 Bitmap.LoadFromFile('Claudia.bmp');
 for i := 0 to ImageHeight - 1 do
   for j := 0 to ImageWidth - 1 do
     begin
       PixCol := Bitmap.Canvas.Pixels[j, i];
       Image[ImageHeight - i - 1][j][0] := PixCol and $FF;
       Image[ImageHeight - i - 1][j][1] := (PixCol and $FF00) shr 8;
       Image[ImageHeight - i - 1][j][2] := (PixCol and $FF0000) shr 16;
     end;
 Bitmap.Free;
end;

Просто для себя решил его переделать на такой:

procedure TfrmGL.MakeImage;
var
 i, j: Integer;
 PixCol: TColor;
 Bitmap: TBitmap;

begin
 Bitmap := TBitmap.Create;
 Bitmap.LoadFromFile('Claudia.bmp');
 for i := 0 to ImageHeight - 1 do
   begin
     P := Bitmap.ScanLine[i];
     for j := 0 to ImageWidth - 1 do
       begin
         Image[ImageHeight - i - 1][j][0] := P[j] and $FF;
         Image[ImageHeight - i - 1][j][1] := (P[j] and $FF00) shr 8;
         Image[ImageHeight - i - 1][j][2] := (P[j] and $FF0000) shr 16;
       end;
   end;
 Bitmap.Free;
end;

Но почему то картинка отображается некорректно. Немогу понять почему. Подскажите пожлуйста как исправить.


Yanis   (2006-01-22 01:16:00) [1]

2 XProger [6]
Спасибо. Теперь всё работает. Просто хотел разобраться.


XProger   (2006-01-21 19:47:00) [2]


type TRGB = array [0..1] of record R, G, B: Byte; end;
var p : ^TRGB;
...
Bitmap.LoadFromFile('Claudia.bmp');
Bitmap.PixelFormat := pf24bits;
...
        Image[ImageHeight - i - 1][j][0] := P[j].B;
        Image[ImageHeight - i - 1][j][1] := P[j].G;
        Image[ImageHeight - i - 1][j][2] := P[j].R;


Yanis   (2006-01-21 18:33:00) [3]


> Bitmap.PixelFormat чему равен хоть?

Ord(Bitmap.PixelFormat) выводит 3, т.е. pf8bit. (?)


Кефир87   (2006-01-21 18:15:00) [4]

ИМХО не самая удачная реализация загрузки битмапа 8)


XProger   (2006-01-21 18:02:00) [5]

Bitmap.PixelFormat чему равен хоть?


П7   (2006-01-21 17:59:00) [6]

Потому, что P : P ByteArray, а PixCol : Integer.


Yanis   (2006-01-21 17:43:00) [7]

К стати P глобальная переменная типа PByteArray. (подсмотрел в справке по ScanLine)


Наверх

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