Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.036 c
9-1150618621
ors_archangel
2006-06-18 12:17
2007.05.20
Сихнронизация компов игры


15-1177249159
ari_9
2007-04-22 17:39
2007.05.20
в каком DB-эксплорере можно сделать sql запрос из двух FB баз ?


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


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


2-1177583759
гость_2007
2007-04-26 14:35
2007.05.20
MySQL





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский