GetPixel Funktion mit CreateDIBSection



  • Hallo,

    ich würde gerne eine Funktion schreiben, die wie GetPixel den Farbwert an der Stelle x / y als COLORREF zurück gibt, nur nicht so langsam wie mit GetPixel.

    Wie genau mache ich das mit CreateDIBSection?
    Ich habe mehrere Beiträge dazu angesehen aber ich finde nicht den richtigen Einstieg, wo ich an die Farbwerte an einer bestimmten xy-Stelle komme.

    Kann mir einer vielleicht weiter helfen, ich glaube der Codeanfang ist soweit in Ordnung...

    int dx = GetSystemMetrics(SM_CXSCREEN);
    	int dy = GetSystemMetrics(SM_CYSCREEN);
    
    	BITMAPINFO info = {0};
    	info.bmiHeader.biSize     = sizeof(BITMAPINFOHEADER);
    	info.bmiHeader.biWidth    = dx;
    	info.bmiHeader.biHeight   = dy;
    	info.bmiHeader.biPlanes   = 1;
    	info.bmiHeader.biBitCount = 32; // 32:RGBQUAD; 24:RGBTRIPLE
    
    	HBITMAP bitmap;
    	RGBQUAD* memory;
    	HDC hdcDesktop = GetDC(0);
    	bitmap = CreateDIBSection(hdcDesktop, &info, DIB_RGB_COLORS, (void**)&memory, 0, 0);
    


  • So aus dem Kopf ist das glaube ich ungefähr so bei top-down Bitmaps (d.h. bei info.bmiHeader.biHeight wird die Höhe mit negativem Vorzeichen angegeben:)

    Speicherstelle = y*(breite)*4 + x*4
    speicher[Speicherstelle+0]=blau;
    speicher[Speicherstelle+1]=grün;
    speicher[Speicherstelle+2]=rot;
    speicher[Speicherstelle+3]=unbenutzt;
    

    Bevor du auf memory zugreifst, solltest du in die DIB-Section allerdings vorher evtl. erstmal ein Bild blitten 😉



  • Vielen Dank!
    Dein Ansatz ausn Kopf heraus war zwar noch fehlerhaft aber er hat mir gereicht, dass ich die Funktion hin bekommen habe.


Log in to reply