ERLEDIGT
NEIN
NEIN
ANTWORTEN
8
8
ZUGRIFFE
2771
2771
EMPFEHLEN
-
Hi!
Ich möchte gerne ein einfaches Bild von meiner Webcam bekommen OHNE irgendein Fenster erstellen zu müssen!
Gibts dafür ne Funktion, Code oder irgendwas aus dem OpenSource-Bereich?
Ich nutze Visual Studio 2002 unter XP
Bin echt am verzweifeln...
-
19.09.04 14:48 #2
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Ganz ohne HWND geht es nicht. Aber du musst das Bild ja nicht anzeigen. Bei dem Thema hilft dir Video for Windows (VfW) und das ist ja bereits eingebaut.
http://www.webopedia.com/TERM/V/Video_for_Windows.html
http://msdn.microsoft.com/archive/de...uredevices.aspChor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
Harter Stoff, danke erstmal!
Wenns wirklich nicht ohne Fenster geht, gibts ne möglichkeit das zu verstecken,
das es nur als Prozess im Task-Manager auftaucht? (also nicht uner Anwendungen!)
-
19.09.04 18:27 #4
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Klar, es zu verstecken ist kein Problem.Original geschrieben von C Coder
Harter Stoff, danke erstmal!
Wenns wirklich nicht ohne Fenster geht, gibts ne möglichkeit das zu verstecken,
das es nur als Prozess im Task-Manager auftaucht? (also nicht uner Anwendungen!)
Ich suche gerade ein Testprojekt, wo ich das mal gemacht habe, allerdings kann es noch eine Weile dauern, bis ich es finde. Und ich bin in den nächsten Tagen nicht online. Vielleicht kann ja auch Endurion was zum Thema sagen; der hat mir nämlich gezeigt , wie es geht.
Ah, ich habe es anscheinend schon einmal gepostet. Guck mal, ob dir das weiterhilft, und lass dich nicht von den Kommentaren irritieren -- die waren zu einer anderen Sache.
Code :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 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194
//... stdafx.h usw. #include <vfw.h> #pragma comment( lib, "vfw32.lib" ) // Der View hat ein Member für das Capturewindow CChildView::CChildView() { hwndCapture_ = 0; } ///////////////////////////////////////////////////////////////////// //- OnCreate ///////////////////////////////////////////////////////////////////// int CChildView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CWnd ::OnCreate(lpCreateStruct) == -1) return -1; InitCapture(); Invalidate(); return 0; } ///////////////////////////////////////////////////////////////////// //- OnEraseBkgnd ///////////////////////////////////////////////////////////////////// BOOL CChildView::OnEraseBkgnd(CDC* pDC) { return TRUE; } ///////////////////////////////////////////////////////////////////// //- //- Videograbbing //- ///////////////////////////////////////////////////////////////////// namespace { BOOL StartCapture( HWND hwndCapture ) { if ( hwndCapture == NULL ) { return FALSE; } if ( !SendMessage( hwndCapture,WM_CAP_DRIVER_CONNECT, 0, 0 ) ) { // kein Video-Input-Device gefunden DestroyWindow( hwndCapture ); return FALSE; } SendMessage( hwndCapture, WM_CAP_SET_SCALE, (WPARAM)TRUE, 0 ); SendMessage( hwndCapture, WM_CAP_SET_PREVIEW, 1, 0 ); SendMessage( hwndCapture, WM_CAP_SET_PREVIEWRATE, 30, 0 ); return TRUE; } void StopCapture( HWND hwndCapture ) { if ( hwndCapture == NULL ) { return; } SendMessage( hwndCapture, WM_CAP_STOP, 0, 0 ); SendMessage( hwndCapture, WM_CAP_SET_PREVIEW, 0, 0 ); } inline unsigned long C24TO15( unsigned long color ) { return ( ( ( ( color & 0xff0000 ) >> 16 ) >> 3 ) << 10 ) | ( ( ( ( color & 0x00ff00 ) >> 8 ) >> 3 ) << 5 ) | ( ( ( ( color & 0x0000ff ) >> 0 ) >> 3 ) << 0 ); } }; int CChildView::InitCapture() { hwndCapture_ = capCreateCaptureWindow( "capture", WS_OVERLAPPEDWINDOW, 0, 0, 640, 480, GetSafeHwnd(), 0 ); ::SetWindowPos( hwndCapture_, NULL, 0, 0, 380, 285, SWP_NOZORDER ); ::ShowWindow( hwndCapture_, SW_SHOW ); StartCapture( hwndCapture_ ); return 0; } void CChildView::OnDestroy() { if ( hwndCapture_ != NULL ) { StopCapture( hwndCapture_ ); ::SendMessage( hwndCapture_, WM_CAP_DRIVER_DISCONNECT, 0, 0 ); ::DestroyWindow( hwndCapture_ ); hwndCapture_ = NULL; } CWnd::OnDestroy(); } void CChildView::OnDateiEinstellungen() { capDlgVideoFormat( hwndCapture_ ); } /*-CaptureImage---------------------------------------------------------------+ | | +----------------------------------------------------------------------------*/ BOOL CChildView::CaptureImage() { ::SendMessage( hwndCapture_, WM_CAP_GRAB_FRAME, 0, 0 ); ::SendMessage( hwndCapture_, WM_CAP_EDIT_COPY, 0, 0 ); if ( !::OpenClipboard( GetSafeHwnd() ) ) { ::MessageBox( GetSafeHwnd(), "Konnte ClipBoard nicht anfordern.", "Fehler!", 0 ); return FALSE; } HBITMAP hBitmap = (HBITMAP)GetClipboardData( CF_DIBV5 ); if ( hBitmap == NULL ) { CloseClipboard(); ::MessageBox( GetSafeHwnd(), "Das Clipboard ist leer!", "Fehler", 0 ); return FALSE; } BITMAPINFO* pInfo = ((BITMAPINFO*)hBitmap); LONG dwWidth = pInfo->bmiHeader.biWidth; LONG dwHeight = pInfo->bmiHeader.biHeight; WORD bitcount = pInfo->bmiHeader.biBitCount; DWORD colorused = pInfo->bmiHeader.biClrUsed; // für debugging //dh() << dwWidth << ", " << dwHeight << ", " << bitcount << ", " << colorused << "\n"; //dh() << pInfo->bmiHeader.biSize << "\n"; if ( bitcount == 24 ) { int iLO = dwWidth; if ( iLO % 4 ) iLO += ( 4 - iLO % 4 ); DWORD dwHeaderSize = 124; int targetwidth = m_pFrontPage->width(); char* pBitmap = ( (char*) pInfo ) + dwHeaderSize + colorused * 4; for ( int j = 0; j < dwHeight; ++j ) { for ( int i = 0; i < dwWidth; ++i ) { unsigned long* pPixel = (unsigned long*)( pBitmap + i * 3 + j * iLO * 3 ); //#pragma TODO( "umbauen, damits auch für andere screenbreiten passt" ) // HIER BEKOMMST DU JEDEN EINZELNEN PIXELWERT! // das würde die pixel buffern: // (WORD)*( (WORD*)(m_pFrontPage->data()) + i + ( dwHeight - j - 1 ) * targetwidth ) = C24TO15( *pPixel ); } } } DeleteObject( hBitmap ); CloseClipboard(); return TRUE; } void CChildView::OnLButtonDblClk(UINT nFlags, CPoint point) { CaptureImage(); StartCapture( hwndCapture_ ); CWnd::OnLButtonDblClk(nFlags, point); } void CChildView::OnEditCopy() { CaptureImage(); StartCapture( hwndCapture_ ); }Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
Super Danke!
Das mit dem einzelnen Bild klappt jetzt schon sehr gut!
Nur jetzt hab ich son dämliches Fenster auf dem Desktop rumliegen...
Wie bekomme ich das jetzt versteckt(evtl. TrayLeiste oder service)?Geändert von C Coder (19.09.04 um 21:28 Uhr)
-
20.09.04 04:46 #6
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Ich kann dir im Moment auch nicht genau sagen, wie es geht -- keine Zeit, zu stöbern -- und paste hier einfach mal einen Schnipsel aus einer Dialoganwendung, die auch als Shell-Icon existierte:
Hoffentlich habe ich keine wichtige Stelle vergessen. Viel Glück!Code :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
// zeitdlg.cpp: NOTIFYICONDATA nidIcon; BYTE *pSound = NULL; BYTE *pSoundAlarm = NULL; #define UPDATEFILE "Q:\\Zeitverwaltung\\Zeit_Exe\\Zeit.exe" extern CZeitApp theApp; void CZeitDlg::MakeIcon() { nidIcon.cbSize = sizeof( NOTIFYICONDATA ); nidIcon.hWnd = GetSafeHwnd(); TRACE( "nidIcon.hWnd %u\n", nidIcon.hWnd ); nidIcon.uID = 0; nidIcon.uFlags = NIF_TIP | NIF_ICON | NIF_MESSAGE; nidIcon.uCallbackMessage = WM_NOTIFY_SIZER; nidIcon.hIcon = theApp.LoadIcon( MAKEINTRESOURCE( IDR_MAINFRAME ) ); wsprintf( nidIcon.szTip, "Zeitverwaltung" ); Shell_NotifyIcon( NIM_ADD, &nidIcon ); ::DestroyIcon( nidIcon.hIcon ); } void CZeitDlg::DestroyIcon() { nidIcon.cbSize = sizeof( NOTIFYICONDATA ); nidIcon.hWnd = GetSafeHwnd(); TRACE( "nidIcon.hWnd %u\n", nidIcon.hWnd ); nidIcon.uID = 0; Shell_NotifyIcon( NIM_DELETE, &nidIcon ); } CZeitDlg::CZeitDlg(CWnd* pParent /*=NULL*/) : CDialog(CZeitDlg::IDD, pParent) { //{{AFX_DATA_INIT(CZeitDlg) //}}AFX_DATA_INIT m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); Create(IDD); }
Ach so, MakeIcon() wird in OnInitDialog aufgerufen.Geändert von Kachelator (20.09.04 um 04:49 Uhr)
Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
Danke erstmal, ich werds mal ausprobieren!
-
Ein einfaches ShowWindow( SW_HIDE ) sollte das Fenster auch aus der Taskleiste verbannen.
Ansonsten dem Fenster zusätzlich den Stil WS_EX_TOOLWINDOW verpassen. Das zwingt Windows auch, das Fenster nicht in die Taskleiste zu kleben.
-
@Endurion
Danke, habs ausprobiert, funktioniert
@Kacheltor
Sieht interessant aus, ich werds mal probieren einzubauen
Ähnliche Themen
-
Webseite Snapshot
Von wachteldonk im Forum PHPAntworten: 0Letzter Beitrag: 13.07.10, 16:34 -
SnapShot
Von Wully im Forum HTML & XHTMLAntworten: 0Letzter Beitrag: 16.10.07, 11:06 -
linux webcam jeder min bild machen!
Von siegpes im Forum Linux & UnixAntworten: 1Letzter Beitrag: 02.09.05, 15:06 -
Mit einer Webcam gescheite Videos machen?!
Von metty im Forum Videoschnitt, Videotechnik & -produktionAntworten: 2Letzter Beitrag: 04.03.05, 12:42 -
ein Video über Webcam in VB machen...
Von sasasavic im Forum Visual Basic 6.0Antworten: 3Letzter Beitrag: 11.02.05, 22:48





Zitieren
Login






