purebasic.info

PureBasic forum
Текущее время: Вс июл 12, 2020 7:27 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: получить скрин с камеры
СообщениеДобавлено: Сб июн 07, 2014 6:10 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Ср май 08, 2013 10:51 am
Сообщений: 621
Откуда: Новотроицк
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
всем привет..целый день копаюсь в камерах,точнее в получении изображения с камеры чего вообще никак...вроде и анг и рус форум весь перебрал и толком ничего не добился,может у кого есть код ,который точно фоткает и сохраняет

_________________
Порядок необходим глупцам, гений же властвует над хаосом(А.Эйнштейн ©)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: получить скрин с камеры
СообщениеДобавлено: Сб июн 07, 2014 6:17 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6651
Благодарил (а): 36 раз.
Поблагодарили: 234 раз.
Пункты репутации: 65
Владислав писал(а):
есть код ,который точно фоткает и сохраняет

На этот код ещё ни кто не жаловался.
Как минимум 1 фото он делает уверенно!

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: получить скрин с камеры
СообщениеДобавлено: Сб июн 07, 2014 6:24 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Ср май 08, 2013 10:51 am
Сообщений: 621
Откуда: Новотроицк
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
камера мигает один раз ,но скрина нет ни в одном из дисков...и второй раз только после удаления устройства срабытывает...((

_________________
Порядок необходим глупцам, гений же властвует над хаосом(А.Эйнштейн ©)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: получить скрин с камеры
СообщениеДобавлено: Сб июн 07, 2014 6:41 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Ср май 08, 2013 10:51 am
Сообщений: 621
Откуда: Новотроицк
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
WM_CAP_START = #WM_USER
#WM_CAP_DRIVER_CONNECT = #WM_CAP_START + 10
#WM_CAP_DRIVER_DISCONNECT = #WM_CAP_START + 11
#WM_CAP_DRIVER_GET_CAPS = #WM_CAP_START + 14
#WM_CAP_EDIT_COPY = #WM_CAP_START + 30
#WM_CAP_SET_PREVIEW = #WM_CAP_START + 50
#WM_CAP_SET_PREVIEWRATE = #WM_CAP_START + 52
#WM_CAP_STOP = #WM_CAP_START + 68
#WM_CAP_SET_SCALE = #WM_CAP_START + 53
#WM_CAP_DLG_VIDEODISPLAY = #WM_CAP_START + 43
#WM_CAP_DLG_VIDEOFORMAT = #WM_CAP_START + 41
#WM_CAP_DLG_VIDEOSOURCE = #WM_CAP_START + 42
#WM_CAP_FILE_SAVEDIBA = #WM_CAP_START + 25
#WM_CAP_PAL_SAVEA = #WM_CAP_START + 81
#WM_CAP_FILE_SAVEASA = #WM_CAP_START + 23;sapis
#WM_CAP_ABORT = #WM_CAP_START + 69
#WM_CAP_DLG_VIDEOCOMPRESSION = #WM_CAP_START + 46
#WM_CAP_SEQUENCE = #WM_CAP_START + 62;sapis
If OpenWindow(0, 0, 0, 640, 550, "Video Preview", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
 
 ButtonGadget(1, 270, 485, 100, 50, "Фото")
 
 
 
  If OpenLibrary(0, "avicap32.dll")
    *capAddress = GetFunction(0, "capCreateCaptureWindowA")
     
  hWndC.l = CallFunctionFast(*capAddress, @"My Capture Window", #WS_CHILD | #WS_VISIBLE, 0, 0, 640, 480, WindowID(0),0)
SendMessage_(hWndC, #WM_CAP_DRIVER_CONNECT, 0, 0)
SendMessage_(hWndC, #WM_CAP_DLG_VIDEOSOURCE, 0, 0); тут можно регулировать настройки
SendMessage_(hWndC, #WM_CAP_DLG_VIDEOFORMAT, 0, 0); тут разрешение картинки, но чаще всего получается зелёный экран...
;SendMessage_(hWndC, #WM_CAP_DLG_VIDEODISPLAY, 0, 0)
SendMessage_(hWndC, #WM_CAP_SET_PREVIEW, #True, 0)
SendMessage_(hWndC, #WM_CAP_SET_PREVIEWRATE, 25, 0)
SendMessage_(HWndC, #WM_CAP_SET_SCALE, #True, 0)
 
   
 
  EndIf
EndIf
 
SendMessage_(hWndC, #WM_CAP_EDIT_COPY, 0, 0)
img.l = GetClipboardImage(#PB_Any)
If img.l<>0
reult.l=SaveImage(img.l,"D:\test.jpg",#PB_ImagePlugin_JPEG,10)
EndIf
Repeat
 Event = WaitWindowEvent()
  Select Event
    ; ///////////////////
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = 1
        SendMessage_(hWndC, #WM_CAP_FILE_SAVEDIBA, 0, "D:\test11.bmp")
       
      EndIf
EndSelect
 
Until Event = #PB_Event_CloseWindow
 
SendMessage_(hWndC, #WM_CAP_STOP, 0, 0)
SendMessage_(hWndC, #WM_CAP_DRIVER_DISCONNECT, 0, 0)
DestroyWindow_(hWndC)
CloseLibrary(0)
 
End


при клике не сохраняет почему то(пробовал на разных винтах ..не фига пб 5.11

_________________
Порядок необходим глупцам, гений же властвует над хаосом(А.Эйнштейн ©)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: получить скрин с камеры
СообщениеДобавлено: Сб июн 07, 2014 6:50 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6651
Благодарил (а): 36 раз.
Поблагодарили: 234 раз.
Пункты репутации: 65
Владислав писал(а):
камера мигает один раз ,но скрина нет ни в одном из дисков...и второй раз только после удаления устройства срабытывает...((

Наверно ноутбук, Win8, встроенная камера?
Это уже было, Никита как то озвучивал. Там всё сложно, но может он как то и решил, подождем, что скажет.
А вообще все проблемы с дровами и камерами хитрых производителей, которые не хотят, что бы их камеры работали со стандартным АПИ, и люди покупали их фирменные программы. А так же они обманывают покупателей, впаривая 0.3 Мп камеры под видом продвинутых 9-12 Мп, интерполируя изображение программно. Стандартный АПИ сразу видит подделку и это ни кому не нравится.
В общем тебе с камерой не повезло! Аминь.

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: получить скрин с камеры
СообщениеДобавлено: Сб июн 07, 2014 7:03 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Ср май 08, 2013 10:51 am
Сообщений: 621
Откуда: Новотроицк
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
с этим разобрался,но почему то функция отконекчивания не работает ..как же отконнектиться

_________________
Порядок необходим глупцам, гений же властвует над хаосом(А.Эйнштейн ©)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: получить скрин с камеры
СообщениеДобавлено: Сб июн 07, 2014 7:17 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Ср май 08, 2013 10:51 am
Сообщений: 621
Откуда: Новотроицк
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
может этот код с си+++ переведет ?это работа с камерами через дирекс как я понял
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ICreateDevEnum    *pSysDevEnum = NULL;
D7>IEnumMoniker    *pEnumCat = NULL;
D7>ULONG        chEaten = 0;
D7>IMoniker    *pMoniker = NULL;
 
D7>// найдем все web-камеры в системе
D7>hRes = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, reinterpret_cast<void**>(&pSysDevEnum));
D7>if (FAILED(hRes))
D7>    return FALSE;
D7>if (pSysDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pEnumCat, 0) == S_OK)
D7>{
D7>     while(pEnumCat->Next(1, &pMoniker, &chEaten) == S_OK)
D7>      {
D7>        // тут делаем что нужно
D7>            //
D7>               //
D7>        pMoniker->Release();
D7>      }
D7>        pEnumCat->Release();
D7>}
D7>pSysDevEnum->Release();


_________________
Порядок необходим глупцам, гений же властвует над хаосом(А.Эйнштейн ©)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: получить скрин с камеры
СообщениеДобавлено: Сб июн 07, 2014 7:26 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2328
Откуда: Russia — Belarus
Благодарил (а): 7 раз.
Поблагодарили: 75 раз.
Пункты репутации: 11
viewtopic.php?f=10&t=1978

_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: получить скрин с камеры
СообщениеДобавлено: Сб июн 07, 2014 7:50 pm 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 71 раз.
Поблагодарили: 81 раз.
Пункты репутации: 24
Цитата:
Никита как то озвучивал. Там всё сложно, но может он как то и решил
Да ничего не получилось, и дрова обновлял, а всё равно. А вот встроенное в Win8 приложение "Камера" работает прекрасно...

_________________
Пурик - лучший язык программирования


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: получить скрин с камеры
СообщениеДобавлено: Сб июн 07, 2014 10:08 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6651
Благодарил (а): 36 раз.
Поблагодарили: 234 раз.
Пункты репутации: 65
Испробывал код, предложенный qpAHToMAS. В архиве библиотека wxl_Lib library глючная, на новых версиях Пурика не работает. Если её убрать из кода, то получается вполне годно. По крайней мере у меня на ноуте Самсунг встроенная камера под win8 заработатла сносно. Включал- выключал несколько раз, делал снимки на диск - всё работает. Так что рекомендую.
Вот код, которым надо заменить тот, что в архиве download/file.php?id=1229 :
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
 
 IncludeFile "escapi.pbi"
 
;#WIDTH = 1280/2 ;640
;#HEIGHT = 720/2 ;360
 
;#WIDTH = 640 ;1280
;#HEIGHT = 360 ;#WIDTH * 0.5625 ;16:9 ASPECT RATIO -- YOU MAY ADJUST TO SUIT
#WIDTH = 800
#HEIGHT = 600
 
#WIDTHM1 = #WIDTH - 1
#HEIGHTM1 = #HEIGHT - 1
pixCount = (#WIDTH * #HEIGHT) - 2
 
    device = 0
 
    count = setupESCAPI()
;    Debug "Init: " + Str(count)
 
    If count = 0
      MessageRequester("Error", "Unable to initialize ESCAPI.")
      End
    EndIf
 
    name$ = Space(255)
    getCaptureDeviceName(device, @name$, 255)
;    Debug "Name: " + name$
 
    bufSize = #WIDTH * #HEIGHT * 4
    scp.SimpleCapParams
    scp\mWidth = #WIDTH
    scp\mHeight = #HEIGHT
    scp\mTargetBuf = AllocateMemory(bufSize)
    *buf = scp\mTargetBuf
 
    If initCapture(device, @scp)
;      Debug "Cap init successful."
     
      image = CreateImage(0, #WIDTH, #HEIGHT, 24)
      OpenWindow(0, 50, 50, #WIDTH, #HEIGHT+35, name$, #PB_Window_SystemMenu)
      ImageGadget(0, 0, 0, #WIDTH, #HEIGHT, ImageID(0))
      ButtonGadget(1,10,#HEIGHT+10,70,20, "Save bmp")
      offset = 0
      Quit = #False
 
      Repeat
     
        doCapture(device)
        While isCaptureDone(device) = #False
          WindowEvent = WaitWindowEvent(1)
          If EventGadget() = 1
            If  IsImage(0)
              SaveImage(0,"C:\testCam.bmp")
            EndIf  
             EndIf
          If WindowEvent = #PB_Event_CloseWindow
           
            Quit = #True
            Break
          EndIf      
        Wend
 
offset = 0      
StartDrawing(ImageOutput(0))  
*writeBuffer = DrawingBuffer()
pitch = DrawingBufferPitch()
StopDrawing()
 
;NEEDS PIXEL-BY-PIXEL READING AND WRITING
hm1 = *writebuffer + (#HEIGHTM1 * pitch)
For y = 0 To #HEIGHTM1
  For x = 0 To #WIDTHM1
    PokeL(hm1 + x*3, PeekL(*buf + offset))
    offset + 4
  Next
hm1 - pitch
Next
         
SetGadgetState(0, ImageID(0))
 
Until Quit = #True
 
      deinitCapture(device)
      FreeImage(0)
      FreeMemory(scp\mTargetBuf)
      CloseWindow(0)
    Else
      Debug "Init capture failed."
    EndIf
 
    End


Проверено на pb v 5.11 - 5.22
Вылезет ошибка в pbi, там в структуре надо убрать *mTargetBuf.l -> *mTargetBuf

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: получить скрин с камеры
СообщениеДобавлено: Вт июн 10, 2014 9:34 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Ср май 08, 2013 10:51 am
Сообщений: 621
Откуда: Новотроицк
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
спасибо,реально работает :)

_________________
Порядок необходим глупцам, гений же властвует над хаосом(А.Эйнштейн ©)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: получить скрин с камеры
СообщениеДобавлено: Чт июн 12, 2014 3:45 pm 
Не в сети
док

Зарегистрирован: Сб май 28, 2011 6:55 pm
Сообщений: 176
Благодарил (а): 19 раз.
Поблагодарили: 0 раз.
Для работы с камерой откройте для себя OpenCV, мне как то kvitaliy поведал о такой прекрасной либе.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: получить скрин с камеры
СообщениеДобавлено: Вт май 26, 2015 9:50 pm 
Не в сети
ассистент

Зарегистрирован: Чт авг 05, 2010 5:54 am
Сообщений: 14
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Ни один из найденных примеров у меня не заработал как надо. Нашел код на Delphi, перевел на Пурик. Вроде все работает, но только если запускать из под самого Пурика, скомпилированный же экзешник кино не кажет. В чем может быть причина? Пурик старенький, 4.31, WinXP.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
Macro DefineGUID(IID, Data1, Data2, Data3, Data4, Data5, Data6, Data7, Data8, Data9, Data10, Data11) 
 DataSection
  IID :
  Data.l Data1
  Data.w Data2, Data3
  Data.b Data4, Data5, Data6, Data7, Data8, Data9, Data10, Data11
 EndDataSection
EndMacro
 
#CLSCTX_INPROC_SERVER = 1
 
DefineGUID(CLSID_SystemDeviceEnum, $62BE5D10, $60EB, $11D0, $BD, $3B, $00, $A0, $C9, $11, $CE, $86)
DefineGUID(IID_ICreateDevEnum, $29840822, $5B84, $11D0, $BD, $3B, $00, $A0, $C9, $11, $CE, $86)
DefineGUID(CLSID_VideoInputDeviceCategory,$860BB310,$5D01,$11D0,$BD,$3B,$00,$A0,$C9,$11,$CE,$86);
DefineGUID(IID_IPropertyBag,$55272A00,$42CB,$11CE,$81,$35,$00,$AA,$00,$4B,$B8,$51)
DefineGUID(CLSID_FilterGraph,$E436EBB3,$524F,$11CE,$9F,$53,$00,$20,$AF,$0B,$A7,$70);
DefineGUID(IID_IGraphBuilder,$56A868A9,$0AD4,$11CE,$B0,$3A,$00,$20,$AF,$0B,$A7,$70);
DefineGUID(CLSID_SampleGrabber,$C1F400A0,$3F08,$11D3,$9F,$0B,$00,$60,$08,$03,$9E,$37);
DefineGUID(IID_IBaseFilter,$56A86895,$0AD4,$11CE,$B0,$3A,$00,$20,$AF,$0B,$A7,$70);
DefineGUID(CLSID_CaptureGraphBuilder2,$BF87B6E1,$8C27,$11d0,$B3,$F0,$00,$AA,$00,$37,$61,$C5);
DefineGUID(IID_ICaptureGraphBuilder2,$93E5A4E0,$2D50,$11d2,$AB,$FA,$00,$A0,$C9,$C6,$E3,$8D);
DefineGUID(IID_ISampleGrabber,$6B652FFF,$11FE,$4FCE,$92,$AD,$02,$66,$B5,$D7,$C7,$8F);
DefineGUID(PIN_CATEGORY_PREVIEW,$FB6C4282,$0353,$11D1,$90,$5F,$00,$00,$C0,$CC,$16,$BA);
DefineGUID(IID_IVideoWindow,$56A868B4,$0AD4,$11CE,$B0,$3A,$00,$20,$AF,$0B,$A7,$70);
DefineGUID(IID_IMediaControl,$56A868B1,$0AD4,$11CE,$B0,$3A,$00,$20,$AF,$0B,$A7,$70);
DefineGUID(MEDIATYPE_Video,$73646976,$0000,$0010,$80,$00,$00,$AA,$00,$38,$9B,$71);
DefineGUID(MEDIASUBTYPE_RGB24,$E436EB7D,$524F,$11CE,$9F,$53,$00,$20,$AF,$0B,$A7,$70);
DefineGUID(FORMAT_VideoInfo,$05589F80,$C356,$11CE,$BF,$01,$00,$AA,$00,$55,$59,$5A);
 
DeviceName.VARIANT;
PropertyName.IPropertyBag;
pDevEnum.ICreateDEvEnum;
pEnum.IEnumMoniker;
pMoniker.IMoniker;
;//интерфейсы
FGraphBuilder.IGraphBuilder;
FCaptureGraphBuilder.ICaptureGraphBuilder2;
FMux.IBaseFilter;
FSink.IFileSinkFilter;
FMediaControl.IMediaControl;
FVideoWindow.IVideoWindow;
FVideoCaptureFilter.IBaseFilter;
FAudioCaptureFilter.IBaseFilter;
;//область вывода изображения
FVideoRect.RECT;:           TRect;
FBaseFilter.IBaseFilter;
FSampleGrabber.ISampleGrabber;
 
Structure AM_MEDIA_TYPE;
 majortype.GUID;
 subtype.GUID;
 bFixedSizeSamples.b    ;: BOOL;
 bTemporalCompression.b ;: BOOL;
 lSampleSize.l          ;: ULONG;
 formattype.GUID
 pUnk.IUnknown        ;: IUnknown;
 cbFormat.l             ;: ULONG;
 pbFormat.l             ;: Pointer;
EndStructure;
 
MediaType.AM_MEDIA_TYPE;
 
Structure VIDEOINFOHEADER
 rcSource.Rect;                   // The bit we really want to use
 rcTarget.Rect;                   // Where the video should go
 dwBitRate.l ;: DWORD;                  // Approximate bit data rate
 dwBitErrorRate.l ;: DWORD;             // Bit error rate for this stream
 AvgTimePerFrame.q ;: TReferenceTime = LONGLONG = Int64;  // Average time per frame (100ns units)
 bmiHeader.BitmapInfoHeader;
EndStructure
Structure AMMEDIATYPE
 majortype.GUID         ;: TGUID;
 subtype.GUID           ;: TGUID;
 bFixedSizeSamples.b    ;: BOOL;
 bTemporalCompression.b ;: BOOL;
 lSampleSize.l          ;: ULONG;
 formattype.GUID        ;: TGUID;
 pUnk.IUnknown          ;: IUnknown;
 cbFormat.l             ;: ULONG;
 pbFormat.l             ;: Pointer;
EndStructure
 
CoInitialize_(#Null);// инициализировать OLE COM
OpenWindow(0, 0, 0, 320, 380, "Video Preview", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
PanelGadget(1,0,0,320,240)
;//Создаем объект для перечисления устройств
Result=CoCreateInstance_(?CLSID_SystemDeviceEnum, #Null, #CLSCTX_INPROC_SERVER, ?IID_ICreateDevEnum, @pDevEnum);
Debug Result
;//Перечислитель устройств Video
Result=pDevEnum\CreateClassEnumerator(?CLSID_VideoInputDeviceCategory, @pEnum, 0);
Debug Result
;//Пускаем массив по списку устройств
While pEnum\Next(1,@pMoniker,#Null)=#S_OK
  Debug "VideoDevice found:"
  Result=pMoniker\BindToStorage(#Null, #Null, ?IID_IPropertyBag, @PropertyName)
  If Result<>#S_OK : Debug "Can't query device" : Continue : EndIf
  b.s = Space(255)
  PokeS(@b,"FriendlyName",-1,#PB_Unicode)
  Result=PropertyName\Read(@b, @DeviceName, #Null); //Получаем имя устройства
  If Result<>#S_OK : Debug "Can't get device name" : Continue : EndIf
  Debug PeekS(DeviceName\bstrVal,-1,#PB_Unicode)
Wend
;============= Процедура поиска завершена. Будем работать с последним найденным девайсом.
 ;//Создаем объект для графа фильтров
 Result=CoCreateInstance_(?CLSID_FilterGraph, #Null, #CLSCTX_INPROC_SERVER, ?IID_IGraphBuilder, @FGraphBuilder);
 ;// Создаем объект для граббинга
 Result=CoCreateInstance_(?CLSID_SampleGrabber, #Null, #CLSCTX_INPROC_SERVER, ?IID_IBaseFilter, @FBaseFilter);
 ;//Создаем объект для графа захвата
 Result=CoCreateInstance_(?CLSID_CaptureGraphBuilder2, #Null, #CLSCTX_INPROC_SERVER, ?IID_ICaptureGraphBuilder2, @FCaptureGraphBuilder);
 b.s = Space(255)
 PokeS(@b,"GRABBER",-1,#PB_Unicode)
 ;// Добавляем фильтр в граф
 Result=FGraphBuilder\AddFilter(FBaseFilter, @b)
 ;// Получаем интерфейс фильтра перехвата
 Result=FBaseFilter\QueryInterface(?IID_ISampleGrabber, @FSampleGrabber);
 With MediaType
      majortype  = ?MEDIATYPE_Video;- работает и без этого почему-то. Вообще поля стр-ры можно не заполнять
      subtype    = ?MEDIASUBTYPE_RGB24;
      formattype = ?FORMAT_VideoInfo;
 EndWith;
 FSampleGrabber\SetMediaType(MediaType);// Данные будут записаны в буфер в том виде, в котором они проходят через фильтр  
 FSampleGrabber\SetBufferSamples(#True);// Граф не будет остановлен для получения кадра    
 FSampleGrabber\SetOneShot(#False);
 Debug "Setting filter graph"
 Debug FCaptureGraphBuilder\SetFiltergraph(FGraphBuilder); //Задаем граф фильтров
 Debug "Binding to object"
 Debug pMoniker\BindToObject(#Null, #Null, ?IID_IBaseFilter, @FVideoCaptureFilter);
 ;//добавляем устройство в граф фильтров
 b.s = Space(255)
 PokeS(@b,"VideoCaptureFilter",-1,#PB_Unicode)
Debug "Adding filter"
Result=FGraphBuilder\AddFilter(FVideoCaptureFilter, @b); //Получаем фильтр графа захвата
Debug Result
;//Задаем, что откуда будем получать и куда оно должно выводиться
Debug "Rendering stream"
Result=FCaptureGraphBuilder\RenderStream(?PIN_CATEGORY_PREVIEW, #Null, FVideoCaptureFilter, FBaseFilter, #Null)
Debug Result
;//Получаем интерфейс управления окном видео
Result=FGraphBuilder\QueryInterface(?IID_IVideoWindow, @FVideoWindow);
Debug Result
;//Задаем стиль окна вывода
FVideoWindow\put_WindowStyle(#WS_CHILD | #WS_CLIPSIBLINGS);
wnd=GadgetID(1)
;//Накладываем окно вывода на  Panel1
FVideoWindow\put_Owner(wnd); //(Panel1.Handle);
;//Задаем размеры окна во всю панель
GetWindowRect_(wnd, wndrect.RECT);
CopyMemory(@wndrect,@FVideoRect,SizeOf(RECT)); //Panel1.ClientRect;
;Вот так было в Delphi, но здесь так не пашет, окно куда-то "уходит" или становится слишком маленьким?
;FVideoWindow\SetWindowPosition(FVideoRect\Left,FVideoRect\Top, FVideoRect\Right - FVideoRect\Left,FVideoRect\Bottom - FVideoRect\Top);
FVideoWindow\SetWindowPosition(0,0, FVideoRect\Right - FVideoRect\Left,FVideoRect\Bottom - FVideoRect\Top);
FVideoWindow\put_Visible(#True); //показываем окно
;//Запрашиваем интерфейс управления графом
Debug "Getting graph managing interface"
Result=FGraphBuilder\QueryInterface(?IID_IMediaControl, @FMediaControl);
Debug Result
Debug FMediaControl\Run(); //Запускаем отображение просмотра с вебкамеры
 
Repeat
  Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
CoUninitialize_()
 



Последний раз редактировалось ag Вт май 26, 2015 10:02 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: получить скрин с камеры
СообщениеДобавлено: Вт май 26, 2015 9:59 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6651
Благодарил (а): 36 раз.
Поблагодарили: 234 раз.
Пункты репутации: 65
С этой строки Debug убери!

Debug FMediaControl\Run(); //Запускаем отображение просмотра с вебкамеры этой стоки
Да и ещё с двух выше...

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: получить скрин с камеры
СообщениеДобавлено: Вт май 26, 2015 10:42 pm 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 71 раз.
Поблагодарили: 81 раз.
Пункты репутации: 24
Ctrl+F -> Заменить. Заменяешь "Debug " на "" (пустую строку). Где ошибки вылезут, те строки нафиг

_________________
Пурик - лучший язык программирования


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB