![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Быстрый доступ до цвета в TBitmap [D5, Win95/98, WinME, NT4, Win2k, WinXP]
Ihor © (2002-01-31 16:40:00)Привет всем!
У меня возникла проблема, мне нужно быстрый доступ до пикселя битмапе. То есть мне нужно для каждово пикселя получить отдельно три компонента цвета (R G B). И как их потом собрать опять.
А может быть не толька 24 битная.
А через aBitmap.Canvas.Pixels[x,y] очень долго : -(((
Помогите, плз.
Всем спасибо.
Ihor (2002-01-31 17:36:00) [1]Thanks
MBo (2002-01-31 17:19:00) [2]по разному. 8 бит - надо читать палитру и соотносить номер цвета по инлкусу в палитре, 32 - просто значения.
вот пример 8 bit заполняет градациями серого
для чтения вместо GetBitmapBits может,придется исп. GetDIBits - обращение сложнее (в хелпе написано, что первая не поддерживается, сам не пробовал).
для 24-32 надо будет массив TRGBQuad или TRGBTriple.
посмотрю у себя.
на этом сайте есть статья об устройстве bmp - почитай
var a:array[0..255,0..255] of byte;
ct:array[0..255] of TRGBQuad;
b:tbitmap;
i,j:integer;
begin
b:=tbitmap.create;
b.pixelformat:=pf8bit;
b.Width := 256;
b.Height := 256;
for i:=0 to 255 do begin
ct[i].rgbRed:=i;
ct[i].rgbBlue:=i;
ct[i].rgbGreen:=i;
ct[i].rgbReserved:=0;
end;
for i:=0 to 255 do for j:=0 to 255 do a[i,j]:=trunc(sqrt(i*j));
SetDIBColorTable(b.canvas.Handle,0,$100,ct);
SetBitmapBits(b.Handle, sizeof(a),@a);
Image1.picture.assign(b);
b.free;
Ihor (2002-01-31 16:55:00) [3]Но как из 8, 16 или 32 битов R G B достать ?
MBo (2002-01-31 16:47:00) [4]ScanLine быстрее, а еще лучше GetDiBits