Форум: "Media";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];
Внизвыделение из 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 вся ветка
Форум: "Media";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c