Форум: "Media";
Текущий архив: 2007.05.20;
Скачать: [xml.tar.bz2];
ВнизКак работает функция GetDIBits Найти похожие ветки
← →
aKirill.INFO (2006-09-11 11:13) [0]Пробую симулировать работу GetDIBits, но чтото нето выходит:
type
TRGB32 = packed record
B, G, R, A: Byte;
end;
TRGB32Array = packed array[0..MaxInt div SizeOf(TRGB32)-1] of TRGB32;
PRGB32Array = ^TRGB32Array;
var
x,y: Integer;
Data: PByteArray;
pl: PRGB32Array;
begin
Bitmap.handletype := bmDib;
Bitmap.PixelFormat := pf32bit;
try
for y := biHeight - 1 downto 0 do
begin
pl := Bitmap.ScanLine[y];
for x := 0 to biWidth - 1 do
begin
Data[(y*biHeight)+(x*3)] := pl[x].R;
Data[(y*biHeight)+(x*3)+1] := pl[x].R;
Data[(y*biHeight)+(x*3)+2] := pl[x].R;
end;
end;
except
on e: Exception do
ShowMessage(e.Message);
end;
← →
MBo © (2006-09-11 11:20) [1]Data[(y*biHeight) - неправильно, y нужно умножать на длину строки в байтах (для 3 бит - Width*4)
← →
aKirill.INFO (2006-09-11 11:35) [2]А можно чуток поподробней с примером, пожалуйста.
← →
MBo © (2006-09-11 11:37) [3]Что ты хочешь сделать, и почему бы не воспользоваться GetDIBits?
← →
aKirill.INFO (2006-09-11 11:41) [4]GetDIBits используеться в цикле, первый заход норамльно отробатывает, а воторй начинает глючить, если несколько раз подрят, то какойто раз все картинки всетаки нормально обработает
← →
MBo © (2006-09-11 11:48) [5]>воторй начинает глючить
Может, неправильно используешь?
← →
aKirill.INFO (2006-09-11 11:58) [6]Это продолжение, этого вопроса:
http://delphimaster.net/view/8-1157683616/
Вроде как все правильно, нюанс что на NVIDIA начинает со второго раза это проявляться, а на карточках от ATI может и спервого захода проявиться касяк.
← →
SamBrook © (2006-09-12 01:47) [7]
> for y := biHeight - 1 downto 0 do
> begin
> pl := Bitmap.ScanLine[y];
> for x := 0 to biWidth - 1 do
> begin
> Data[(y*biHeight)+(x*3)] := pl[x].R;
> Data[(y*biHeight)+(x*3)+1] := pl[x].R;
> Data[(y*biHeight)+(x*3)+2] := pl[x].R;
> end;
> end;
В тексте 3 ошибки:
1. Кто память под DATA резервировать будет?
2. Data[(y*biHeight)+(x*3)] если читаем по 3 байта то не (y*biHeight) а (y*3*biWidth).
3. Какой смысл 3 раза подряд читать одно и то же значение?
← →
aKirill.INFO (2006-09-12 06:42) [8]Спасибо уже все сделал
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2007.05.20;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.046 c