![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Разбираю пример...
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)