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

Вниз

выделение из BMP массива пикселов   Найти похожие ветки 

 
3DiMaN   (2005-04-07 19:32) [0]

24 битный BMP находится в Клипборде
подскажите плиз, как получить простой массив его пикселов без всяких TBitmapInfoHeader и прочей ненужной инфы ?

предполагается сделать детектор движения поэтому необходим
анализ изменения пикселов на фотографии

заранее благодарен


 
Gero ©   (2005-04-07 19:38) [1]

Загружай в поток, и начиная с SizeOf(TBitmapInfoHeader) + 1 будет массив пикселей.


 
Магнитоныч   (2005-04-07 23:01) [2]

GetBitmapBits
GetDiBits

или Bitmap.ScanLine


 
3DiMaN   (2005-04-09 11:12) [3]

пытаюсь делать вот так
на большее ума пока не хватает )))
но тормозааааа жуткие

причем почему то из-за строчек
if Image1.Canvas.Pixels[i,j]<>st[k]   then s:=s+1;
и
st[k]:=Image1.Canvas.Pixels[i,j];

подскажите плиз как все сделать грамотно

procedure TMain.Button2Click(Sender: TObject);
var
i,j,s,k:integer;
st:array [1..100000] of tcolor; //массив пикселей предидущей картинки

begin
Image1.Picture.Assign(Clipboard);
k:=1; s:=0;

for i:=1 to Image1.Picture.Width do
  for j:=1 to Image1.Picture.Height do begin

if Image1.Canvas.Pixels[i,j]<>st[k]   then s:=s+1;
st[k]:=Image1.Canvas.Pixels[i,j];
k:=k+1;
end;

edit3.Text:=inttostr(s);
Application.ProcessMessages;
end;
end;


 
Gero ©   (2005-04-09 11:54) [4]

Этот код даже не скомпилируется.
Проблема в этом?


 
3DiMaN   (2005-04-09 14:42) [5]

сорри, я этот код выдрал из процедуры
там все работает но с тормозами сильными

я бы хотел узнать более эффективный и быстрый алгоритм чтения и сравнения пикселов из битмапа в моем случае

пробовал Bitmap.ScanLine но тормоза почему то еще увеличились


 
Магнитоныч   (2005-04-09 16:21) [6]

http://www.delphimaster.ru/articles/pixels/index.html


 
3DiMaN   (2005-04-09 19:08) [7]

спасибо за ссылочку
попробую


 
programania ©   (2005-04-10 23:46) [8]

с пикселами очень медленно, может так быстрее:
PROCEDURE clipB_b;
begin
try
 b.LoadFromClipBoardFormat(cf_BitMap,ClipBoard.GetAsHandle(cf_Bitmap),0);
except
 er:=true;
 showmessage("Нет картинки в ClipBoard"); exit;
end;
for y:=0 to b.height-1 do move(b.ScanLine[y]^,m[y,0,1],b.width*3);
end;

Весь анализ только в массиве:
Массив 3-ех цветов по каждому пикселу:
m :array[0..1200,0..1600{Это макс.размер картинки},1..3] of byte;

>предполагается сделать детектор движения поэтому необходим
анализ изменения пикселов на фотографии

Но у вас же не пикселы движутся
а более крупные обьекты, поэтому для ускорения
усредните этот массив например в 64*64
его и сравнивайте это будет совсем быстро



Страницы: 1 вся ветка

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

Наверх




Память: 0.46 MB
Время: 0.01 c
11-1105023075
Boguslaw
2005-01-06 17:51
2005.08.14
How to pass string from TKOLThread to KOL form ?


4-1118850669
_Anton
2005-06-15 19:51
2005.08.14
Соощения и потоки


9-1114313103
Nad89
2005-04-24 07:25
2005.08.14
GLUT в Delphi


4-1118676140
voe
2005-06-13 19:22
2005.08.14
Запись CD-R собственными руками!


6-1112417763
Evgenius
2005-04-02 08:56
2005.08.14
Програмная генерация события в TwebBrowser





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