Главная страница
    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.47 MB
Время: 0.037 c
15-1176934894
vasIZmax
2007-04-19 02:21
2007.05.20
Re: Опрос


2-1177742824
Gloomer
2007-04-28 10:47
2007.05.20
ODBC и база dBase3


15-1177320100
Yanis
2007-04-23 13:21
2007.05.20
Посмеялся :)


2-1177689968
Oleg_teacher
2007-04-27 20:06
2007.05.20
Обьединит файлы


2-1178091339
Ламер 2.Х
2007-05-02 11:35
2007.05.20
Реестр XP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский