Главная страница
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.48 MB
Время: 0.029 c
5-1092994745
sirin
2004-08-20 13:39
2005.08.14
expert


1-1122543442
Viktop
2005-07-28 13:37
2005.08.14
Глюки с ActionManager


1-1122014509
vok
2005-07-22 10:41
2005.08.14
CopyFileTo


11-1104254184
miek
2004-12-28 20:16
2005.08.14
KOL: свежие глюки


3-1120674484
Unavaible
2005-07-06 22:28
2005.08.14
Unavaible database