Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
14-1122088462
Comrade
2005-07-23 07:14
2005.08.14
Copy в C++


14-1121873134
drakoga
2005-07-20 19:25
2005.08.14
Где в Делфи7 компонент NMSMTP


10-1099556750
sands
2004-11-04 11:25
2005.08.14
Callbacks &amp; CORBA


3-1120744873
fens
2005-07-07 18:01
2005.08.14
скроллинг текста


14-1122043909
Piter
2005-07-22 18:51
2005.08.14
Black Sabbath





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