bild von webcam ausgeben und drauf zugreifen können
-
hallo,
ich "ziehe" mir ein bild von meiner webcam mittels folgendem code:
::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; } MessageBox("hier"); hBitmap = (HBITMAP)GetClipboardData( CF_DIB ); if ( hBitmap == NULL ) { CloseClipboard(); ::MessageBox( GetSafeHwnd(), "Das Clipboard ist leer!", "Fehler", 0 ); return FALSE; }
das image sollte nun in hBitmap sein... jedenfalls ist es nicht mehr NULL
nun versuche ich es in der OnDraw() auszugeben:
CBitmap lol; lol.FromHandle(hBitmap); CDC *test = new CDC; test->CreateCompatibleDC(pDC); test->SelectObject(lol); pDC->BitBlt(10,10,100,100,test,0,0,SRCCOPY);
es wird allerdings nichts ausgegeben!
wenn ich aber ein bild auf die gleiche art aus den resourcen ausgebe wird dieses angezeigt:
CBitmap lol2; lol2.LoadBitmap(IDB_BITMAP1); CDC* test2 = new CDC; test2->CreateCompatibleDC(pDC); test2->SelectObject(lol2); pDC->BitBlt(200,10,100,100,test2,0,0,SRCCOPY);
warum wird das bild von der webcam nicht angezeigt?
p.s: ich mache das so mit den device-contexten da ich zugriff auf jedes
einzelne pixel über GetPixel haben möchte...
-
aber das Bitmap (hBitmap) müsste doch eig. ausgegeben werden oder?
mache ich was falsch?babel
-
versuch mal statt:
lol.FromHandle(hBitmap);
lol.Attach(hBitmap);
-
hmm ...
static CBitmap* PASCAL FromHandle( HBITMAP hBitmap );
CBitmap* pClipBoardBitmap = CBitmap::FromHandle(hBitmap); if (pClipBoardBitmap == NULL) return; CDC dcMem; dcMem.CreateCompatibleDC(pDC); CBitmap* pOldBitmap = dcMem.SelectObject(pClipBoardBitmap); pDC->BitBlt(10, 10, 100, 100, &dcMem, 0, 0, SRCCOPY); dcMem.SelectObject(pOldBitmap); dcMem.DeleteDC(); pClipBoardBitmap->DeleteObject(); // delete pClipBoardBitmap;
Oder so ähnlich ^^
-
@ (D)Evil
hey danke dir schonmal... aber das klappt leider nicht :-|
nicht das der fehler der ist, das mein hBitmap nicht richtig gefüllt ist?!aber hBitmap ist != NULL !!
hmm...
-
Dann geh mitn Debugger durch und guck ob er bei
if (pClipBoardBitmap == NULL)
return;
rausspringt...
-
also der fehler liegt wohl daran wie ich das HBITMAP fülle...
also ich möchte ja ein bild von meiner webcam capturen. das mache
ich hiermit:::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)GetClipboardData( CF_DIB ); if ( hBitmap == NULL ) { CloseClipboard(); ::MessageBox( GetSafeHwnd(), "Das Clipboard ist leer!", "Fehler", 0 ); return FALSE; }
und dieses auszugeben klappt nicht...
wenn ich das HBITMAP aber einfach so fülle:
hBitmap = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),"c:\\bitmap.bmp", IMAGE_BITMAP, 0, 0,LR_LOADFROMFILE | LR_CREATEDIBSECTION);
dann wird es ausgegeben :-|
-
bei dem versuch das bild von der webcam zu zeichnen tritt ein fehler
bei "SelectObejct" auf!CBitmap* pClipBoardBitmap = CBitmap::FromHandle(hBitmap); if (pClipBoardBitmap == NULL) return; CDC dcMem; dcMem.CreateCompatibleDC(pDC); CBitmap* pOldBitmap = dcMem.SelectObject(pClipBoardBitmap); pDC->BitBlt(10, 10, 100, 100, &dcMem, 0, 0, SRCCOPY); dcMem.SelectObject(pOldBitmap); // SCHLÄGT FEHL !!! dcMem.DeleteDC(); pClipBoardBitmap->DeleteObject();
von daher denke ich das das bild nicht richtig eingelesen wird :-|
-
ja lag daran
danke euch!