, ASK LAB8 KameraVfW, WI ZUT studia, Studia ( WI ZUT ), Architektura systemów komputerowych 

ASK LAB8 KameraVfW

ASK LAB8 KameraVfW, WI ZUT studia, Studia ( WI ZUT ), Architektura systemów komputerowych
[ Pobierz całość w formacie PDF ]
Architektura Systemów Komputerowych, Wydział Informatyki, ZUT
Laboratorium: MS Windows – obsługa kamery
Krok 1.
Uruchamiamy Visual Studio C++. Otwieramy nowy projekt (
menu-File-
New-Project
). Konfigurujemy tak jak na rysunku poniżej. Projekt umieszczamy w
katalogu
C:\users\inazwisko
gdzie
inazwisko
to pierwsza litera swojego imienia i
nazwisko (bez spacji).
Rys. 1.
Okno zakładania nowego projektu
Krok 2.
Konfigurujemy wzorzec projektu tak jak na rysunku poniżej (typu Single
Document).
Rys. 2.
Okno konfiguracji projektu
Opracował: Mariusz Kapruziak (
mkapruziak@wi.ps.pl
)
wersja: 2009-11-11
1
Architektura Systemów Komputerowych, Wydział Informatyki, ZUT
Krok 3.
Otwieramy plik „KameraView.h” i wprowadzamy modyfikacje:
1)
dołączamy plik „Vfw.h” (rys.3)
2)
dodajemy pole HWND m_wndKamera (rys.3)
3)
Dodajemy symbol ID_CAMWND (rys.4)
1
2
Rys. 3.
Modyfikacje w pliku KameraView.h
3
Rys. 4.
Dodawanie symbolu ID_CAMWND
Opracował: Mariusz Kapruziak (
mkapruziak@wi.ps.pl
)
wersja: 2009-11-11
2
Architektura Systemów Komputerowych, Wydział Informatyki, ZUT
Krok 4.
Do klasy CKameraView dodajemy metodę OnInitialUpdate (rys.5).
Wpisujemy kod do utworzonej metody (rys.6). Następnie uruchamiamy program.
Powinniśmy otrzymać komunikat błędu taki jak na rys.7.
void
CKameraView::OnInitialUpdate(){
CView::OnInitialUpdate();
// TODO: Add your specialized code here
HWND hwndParent =
this
->GetSafeHwnd();
m_wndKamera = capCreateCaptureWindow( L
"Nazwa"
,
WS_CHILD | WS_VISIBLE,
10, 10, 640, 480,
hwndParent, ID_CAMWND );
}
//---------------------------------------------------
Rys. 6.
Kod w OnInitialUpdate()
Rys. 5.
Dodawanie metody
OnInitialUpdate
Rys. 7.
Spodziewany komunikat błędów
komentarz:
Funkcja
capCreateCaptureWindow
tworzy okno przechwytywania strumienia wideo.
Wykorzystując technologię Vfw (Video for Windows) trzeba takie okno utworzyć, nawet jeśli nie
chcemy aby było widoczne. Zaleca się spojrzenie do dokumentacji MSDN w celu przeanalizowania
argumentów przekazywanych do funkcji. Ciekawszą obserwacją może być sposób otrzymania
uchwytu do „naszego” okna (CKameraView), które ma się stać oknem nadrzędnym względem
tworzonego. Wykorzystana jest do tego metoda
GetSafeHwnd.
Opracował: Mariusz Kapruziak (
mkapruziak@wi.ps.pl
)
wersja: 2009-11-11
3
Architektura Systemów Komputerowych, Wydział Informatyki, ZUT
Krok 5.
Dodajemy do linkera powiązanie z biblioteką vfw32.lib (rys.8). Następnie
uruchamiamy program ponownie.
Rys. 8.
Dodanie powiązania do vfw32.lib
komentarz:
Tym razem kompilacja i łączenie powinno przejść pomyślnie. W wyniku powinniśmy otrzymać
okno z czarnym kwadratem w środku o rozmiarach 640 na 480. W tym kwadracie w dalszych
etapach będzie pokazywany obraz z kamery po jego przetworzeniu wykonanym przez nas.
Krok 6.
Enumeracja urządzeń
.
komentarz:
Wykorzystując Vfw można obsługiwać do 10 urządzeń wideo. Każde dostaje swój numer. Które
urządzenie jest gotowe do obsługi i które ma jaki numer można określić wykorzystując funkcje
capGetDriverDescription
,
capDriverGetName
oraz
capDriverGetCaps
. Do
połączenia się ze sterownikiem służy funkcja
capDriverConnect
a do rozłączenia
capDriverDisconnect
.
Zadanie:
Wypisać listę wszystkich urządzeń ich statusu oraz stanu ich gotowości:
1)
Dodać tablicę łańcuchów (CString) do klasy CKameraView (rys.9).
2)
Dodać kod do enumeracji w OnInitialUpdate (rys.10).
3)
Przeanalizować dodany kod, w sytuacji jakby coś nie było wystarczająco jasne
KONIECZNIE PYTAĆ (ważne aby rozumieć)
4)
Dodać kod do OnDraw wypisujący listę urządzeń na ekranie (rys.11).
Opracował: Mariusz Kapruziak (
mkapruziak@wi.ps.pl
)
wersja: 2009-11-11
4
Architektura Systemów Komputerowych, Wydział Informatyki, ZUT
class
CKameraView :
public
CView
{
protected
:
// create from serialization only
CKameraView();
DECLARE_DYNCREATE(CKameraView)
protected
:
HWND m_wndKamera;
CString m_strDriversEnum[10];
CString m_strDriversParam[10];
bool
m_bIsDrivers[10];

Rys. 9.
Modyfikacje w KameraView.h – dodanie tablic łańcuchów z opisem urządzeń
void
CKameraView::OnInitialUpdate(){
CView::OnInitialUpdate();
HWND hwndParent =
this
->GetSafeHwnd();
m_wndKamera = capCreateCaptureWindow( L
"Nazwa"
, WS_CHILD | WS_VISIBLE,
10, 10, 640, 480, hwndParent, ID_CAMWND );
for
(
int
i =0; i<10; i++ ){
bool
res = capDriverConnect( m_wndKamera, i );
m_bIsDrivers[i] = res;
m_strDriversParam[i] = L
" "
;
if
( res ){
char
mstring[80];
capDriverGetName( m_wndKamera, mstring, 80 );
CAPDRIVERCAPS drvCaps;
capDriverGetCaps( m_wndKamera, &drvCaps,
sizeof
( drvCaps ) );
m_strDriversEnum[i].Format( L
"%d. %s"
, i, mstring );
if
( drvCaps.fHasDlgVideoSource ){
m_strDriversParam[i] += L
"SourceDLG; "
;
};
if
( drvCaps.fHasDlgVideoFormat ){
m_strDriversParam[i] += L
"FormatDLG; "
;
};
if
( drvCaps.fCaptureInitialized ){
m_strDriversParam[i] += L
"INIT; "
;
};
}
else
{
m_strDriversEnum[i].Format( L
"%d. ----------"
, i );
};
capDriverDisconnect( m_wndKamera );
};
Rys. 10.
Kod w metodzie OnInitialUpdate
}
//-----------------------------------------------------------------------------
Opracował: Mariusz Kapruziak (
mkapruziak@wi.ps.pl
)
wersja: 2009-11-11
5
5)
[ Pobierz całość w formacie PDF ]
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • dodatni.htw.pl