| 
| 
 | Вопрос # 4 809/ вопрос открыт / | 
 |  Здрасте. Вы уже не раз мне помогли, за что Вам сильно благодарен.!!!А у меня тут новая проблемка. Помогите и в этот раз плз = )
 
 Суть проги: с камеры тяну видеопоток. Из него вихватываю картинку, через пару секунд еще одну. Картинки сравниваются по пикселям. Если не похожие - тогда сигнализируется про движение.
 Короче такая сигнализация =)
 
 Дальше выдам код и прицеплю исходник.
 1.Вот проблемы: Не показывает устройства при выборе.
 2. В модуле DSPack бьет ерором в строке
 hr := SampleGrabber.GetConnectedMediaType(MediaType);
 подозреваю что это изза первой проблемы.
 
 И наверное еще есть. Помогите разобратся. Надо прогу до ума довести.
 К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса) Приложение:Переключить в обычный режим unit Unit1; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, DSPack, DSUtil, DirectShow9, ExtCtrls;  type  TForm1 = class(TForm)    FilterGraph1: TFilterGraph;    Filter1: TFilter;    SampleGrabber1: TSampleGrabber;    VideoWindow1: TVideoWindow;    Button1: TButton;    Button2: TButton;    CheckBox1: TCheckBox;    ComboBox1: TComboBox;    Timer1: TTimer;    Image1: TImage;    Image2: TImage;    Memo1: TMemo;    procedure FormCreate(Sender: TObject);    procedure ComboBox1Change(Sender: TObject);    procedure Button1Click(Sender: TObject);    procedure Button2Click(Sender: TObject);    procedure CheckBox1Click(Sender: TObject);    procedure Timer1Timer(Sender: TObject);   private    { Private declarations }  public    { Public declarations }  end; var  Form1: TForm1;  VideoDevice: TSysDevEnum;implementation {$R *.dfm}  procedure TForm1.Button1Click(Sender: TObject);begin beginFilterGraph1.Play; endelsebeginFilterGraph1.Stop; end;end;  procedure TForm1.Button2Click(Sender: TObject);beginSampleGrabber1.GetBitmap(Image1.Picture.Bitmap);end; procedure TForm1.CheckBox1Click(Sender: TObject);beginif CheckBox1.Checked then Timer1.Enabled:=trueelse Timer1.Enabled:=false;end; procedure TForm1.ComboBox1Change(Sender: TObject);beginFilterGraph1.ClearGraph;FilterGraph1.Active := false; Filter1.BaseFilter.Moniker := VideoDevice.GetMoniker(ComboBox1.ItemIndex);FilterGraph1.Active := true; with FilterGraph1 as ICaptureGraphBuilder2 doRenderStream(@PIN_CATEGORY_PREVIEW, nil, Filter1 as IBaseFilter, SampleGrabber1 as IBaseFilter,
VideoWindow1 as IbaseFilter); FilterGraph1.Play;Button1.Enabled:=True;end;  procedure TForm1.FormCreate(Sender: TObject);vari: integer;beginVideoDevice:= TSysDevEnum.Create(CLSID_VideoInputDeviceCategory);if VideoDevice.CountFilters > 0 thenfor i := 0 to VideoDevice.CountFilters - 1 doComboBox1.Items.Add(VideoDevice.Filters[i].FriendlyName);end; procedure TForm1.Timer1Timer(Sender: TObject);var i:integer; j:integer; k:integer;r1,g1,b1:Byte;r2,g2,b2:Byte;FirstColor,SecondColor:Integer;Color:TColor;PriznakChange:byte;begin if Timer1.Tag=0 thenbeginSampleGrabber1.GetBitmap(Image1.Picture.Bitmap);Timer1.Tag:=1;exit;end; SampleGrabber1.GetBitmap(Image2.Picture.Bitmap);Timer1.Tag:=0;k:=0; for i := 1 to Image1.Picture.Bitmap.Height dobeginfor j := 1 to Image1.Picture.Bitmap.Width dobeginPriznakChange:=0; FirstColor:=Image1.Picture.Bitmap.Canvas.Pixels[i,j]; r1:=GetRValue(FirstColor);g1:=GetGValue(FirstColor);b1:=GetBValue(FirstColor);SecondColor:=Image2.Picture.Bitmap.Canvas.Pixels[i,j];r2:=GetRValue(SecondColor);g2:=GetGValue(SecondColor);b2:=GetBValue(SecondColor); if Abs(r1-r2)>20 then inc(PriznakChange);if Abs(g1-g2)>20 then inc(PriznakChange);if Abs(b1-b2)>20 then inc(PriznakChange); if PriznakChange=3 then k:=k+1;Application.ProcessMessages;end;end; if k>2000 thenbegin Image2.Picture.Bitmap.SaveToFile('log\'+FormatDateTime('hhnnss',Now)+'.bmp');end;end;end.  
|  |   Вопрос задал: hatecows (статус: Посетитель)Вопрос отправлен: 11 декабря 2010, 23:01
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 5; последнее сообщение — 13 декабря 2010, 03:55; участников в обсуждении: 3. 
|   | hatecows (статус: Посетитель), 12 декабря 2010, 00:41 [#1]:в чем ошыбки то ? хоть что - то... |  
|   | min@y™ (статус: Доктор наук), 12 декабря 2010, 08:10 [#2]: Цитата (hatecows): в чем ошыбки то ? хоть что - то...  Ну и чего ты предлагаешь? Всем срочно встать с дивана, бежать в магазин покупать камеру, подключать эту камеру к компу, качать DSPack, устанавливать его, затем грузить твой код в Delphi и искать ошибку? Я правильно понял?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | hatecows (статус: Посетитель), 12 декабря 2010, 14:52 [#3]:Нет. Хотя бы код пролистать, может я там грубо чего напортачил. |  
|   | Вадим К (статус: Академик), 12 декабря 2010, 17:50 [#4]:начнем с простого - в системе определяется видео устройство или нет? Например в скайпе? Галочка "подтверждения прочтения" - вселенское зло. |  
|   | hatecows (статус: Посетитель), 13 декабря 2010, 03:55 [#5]:Да. Вебка работает. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |