[Erledigt] Pixeldaten eines Fensters



  • Hi Leute!
    Ich brauch für ein Screenshot-Video-Programm eine Möglichkeit die Pixel eines Fensters auszulesen.

    Ich habe einen Handle HWND hWindow auf das betroffene Fenster.
    Ein DC HDC hDCWnd= GetDC(hWindow) hab ich auch.
    Jetzt brauch ich bloß eine Möglichkeit an alle Pixel auf einmal in Form eines COLORREF-Array ranzukommen.

    GetPixel würde hier wegfallen.

    Kennt sich da jemand aus?



  • GetDIBits

    😉

    auf der seite ist auch ein fertiges beispiel zum kopieren:
    klickme



  • ich seh den Wald vor Bäumen nicht.
    Ein Codesample wäre praktisch: In= HDC eines Fensters; OUT= COLORREF-Array

    Bitte!



  • ⚠ ungetesteter kopf-compiler-code ⚠

    COLORREF *GetPixelsFromWindow(HWND hWnd)
    {
    RECT r;
    GetClientRect(hWnd, &r);
    HDC hdc = GetDC(hWnd);
    HDC memdc = CreateCompatibleDC(hdc);
    HBITMAP membitmap = CreateCompatibleBitmap(hdc, r.right - r.left, r.bottom - r.top);
    HGDIOBJ oldbitmap = SelectObject(memdc, membitmap);
    
    BitBlt(memdc, 0, 0, r.right - r.left, r.bottom - r.top, hdc, 0, 0, SRCCOPY);
    
    COLORREF *pixels = new COLORREF[(r.right - r.left) * (r.bottom - r.top)];
    
    BITMAPINFO info;
    
    GetDIBits(memdc, membitmap, 0, r.bottom - r.top, 0, &info, DIB_RGB_COLORS);
    GetDIBits(memdc, membitmap, 0, r.bottom - r.top, pixels, &info, DIB_RGB_COLORS);
    
    SelectObject(memdc, oldbitmap);
    DeleteObject(membitmap);
    DeleteDC(memdc);
    ReleaseDC(hdc);
    
    return pixels;
    }
    

    auf das einrücken hab ich heute mal verzichtet, bitte um nachsicht 😃



  • Danke erstmal, ich schau es mir gleich mal an!



  • Tut mir leid, geht nicht!



  • "Geht nicht" ist keine Fehlerbeschreibung.



  • Ich hab den Fehler gefunde:
    GetDIBits(memdc, membitmap, 0, r.bottom - r.top, 0, &info, DIB_RGB_COLORS);
    Füllt nicht wie erwartet "info" aus, sonder meckert rum.
    Da ich aber die genauen Daten kenne, die in "info" stehen müssen, fülle ich es vorher aus und alles funktioniert!

    Danke für die Hilfe!



  • info.bmiHeader.biCompression=BI_RGB ????
    GetDIBits(hDC,hBitmap,0,0,0,&info,DIB_RGB_COLORS),...

    grüüüße


Anmelden zum Antworten