Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.20;
Скачать: CL | DM;

Вниз

Как работает функция 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 вся ветка

Текущий архив: 2007.05.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.044 c
6-1163500546
OlBan
2006-11-14 13:35
2007.05.20
Компонент Indy IdHTTP и https


15-1176974376
Petr V.Abramov
2007-04-19 13:19
2007.05.20
Полет армейской мысли


2-1177903516
>>DEATH<<
2007-04-30 07:25
2007.05.20
вопрос по диалапу


2-1178026174
Ксандр
2007-05-01 17:29
2007.05.20
Проблемы с мышью


6-1163203218
Суслик
2006-11-11 03:00
2007.05.20
AJAX and Delphi