Bitmap in variable speichern



  • hallo,

    zu meinem problem:
    ich habe eine funktion die bitmaps aus der zwischenablage holt (das funktioniert). nun möchte ich das bitmap in einer variable speichern um beim nächsten aufruf der funktion das gespeicherte bitmap mit dem neuen das ich wieder aus der zwischenablage hole pixelweise vergleichen.... (die zwischenablage wird geleert beim verlassen der funktion)

    meine frage: wie kann ich das bitmap in eine variable speichern so dass das bitmap beim erneuten aufruf der funktion noch drinne ist.

    danke



  • Ich kann mir nicht vorstellen, daß man eine ganze Datei in einer Varialben speichern kann. Wenn Die bmp nicht allzu groß ist, kannst Du ein Array erstellen und darin die Daten ablegen, ähnlich, wie das im Resourceneditor läuft.
    Aber prüfe mal, ob Du einen Zeiger auf die bmp setzen und beim Vergleich dereferenzieren kannst.



  • Problem ist unverständlich.



  • Du allozierst (z. B. mit "malloc") Speicher und kopierst die Bitmap-Daten in diesen Speicher. Mit "memcmp" kannst Du 2 Speicherbereiche auf Übereinstimmung prüfen.



  • also... ich will einen bewegungsmelder programmieren.
    ich hole mir die bilder mittel wfv und einem timer.
    hier bisschen code:

    BITMAPINFO bi ;
    unsigned char R, G, B ;
    HBITMAP hBitmap ;
    HDC hDC, hMemDC ;
    int iHeight, iWidth ;
    COLORREF colorref ;
    BITMAP bm ;
    
    WM_TIMER :
     KillTimer (hwnd, ID_TIMER_1) ;
     EmptyClipboard () ;
     capGrabFrame (GetDlgItem (hwnd, ID_VIDEO_WINDOW)) ;
     capGetVideoFormat (GetDlgItem (hwnd, ID_VIDEO_WINDOW), &bi, sizeof (bi)) ;
     capEditCopy (GetDlgItem (hwnd, ID_VIDEO_WINDOW)) ;
     if (!OpenClipboard (hwnd)){
      MessageBox (hwnd, "gehabt", "Pech", NULL) ;
      return 1 ;
     }
     hBitmap = (HBITMAP) GetClipboardData (CF_BITMAP) ;
     if (!hBitmap){
      MessageBox (hwnd, "gehabt", "Pech", NULL) ;
      return 1 ;
     }
     hDC = GetDC (NULL) ;  
     hMemDC = CreateCompatibleDC (hDC) ;  
     GetObject (hBitmap, sizeof (BITMAP), (LPSTR)&bm) ;  
     SelectObject (hMemDC, hBitmap) ;
     for (iHeight = 0; iHeight < bm.bmHeight; iHeight++){    
      for (iWidth = 0; iWidth < bm.bmWidth; iWidth++){      
       colorref = GetPixel (hMemDC, iWidth, iHeight) ;
       R = GetRValue (colorref) ;
       G = GetGValue (colorref) ;
       B = GetBValue (colorref) ;
      }  
     }
     CloseClipboard () ;
     SetTimer (hwnd, ID_TIMER_1, 5000, NULL) ;
     return 0 ;
    }
    

    so, das ist das mein grundgerüst. ich hole das bild von der webcam und packe es in Clipboard, dann hole ich mir das bild aus dem clipboard, und laufe es pixel für pixel durch.... das funktioniert wuderbar. aber, nun will ich das bild in eine variable speichern damit ich beim nächsten aufruf vom timer das alte bild mit dem neuem bild, das ich dann wieder aus dem clipboard hole, vergleichen kann. ich will nicht das bild in eine datei abspeichern, sondern wie mgs_ geschrieben hat speicher allozieren, aber das klapte nicht 😞

    danke noch mal...



  • Schau dir mal das Beispiel "Picture" auf meine Homepage an:

    http://members.inode.at/anton.zechner/az/index.html

    Die Klasse BitmapImage in Allgemein/Image/BitImage.cpp kann Bilder
    aus der Zwischenablage speichern und wieder einfügen.

    Eine Doku zur Klasse findest du in Allgemein/BitmapImage.chm


Anmelden zum Antworten