Zugriff auf einzelne Pixel in HBITMAP



  • Verdammt, habs hinbekommen... Danke an alle

    inline void SetBitmapPixel(HBITMAP hBitmap, int cx, int cy, COLORREF clPixel) {
        HDC hdc = CreateCompatibleDC(GetDC(GetDesktopWindow()));
        HGDIOBJ hOldObj = SelectObject(hdc, hBitmap);
        SetPixel(hdc, cx, cy, clPixel);
        SelectObject(hdc, hOldObj);
    };
    


  • Mach das lieber so:

    HDC hdc = CreateCompatibleDC(GetDC(GetDesktopWindow()));
    HGDIOBJ hOldObj = SelectObject(hdc, hBitmap);
    SetPixel(hdc, 10, 10, RGB(0,0,0));
    SetPixel(hdc, 20, 20, RGB(0,0,0));
    // usw. mit SetPixel
    SelectObject(hdc, hOldObj);
    

    Du sparst dir jedesmal das Erstellen des kompatiblen DC's wenn du dies einmal machst. Die Funktion SetBitmapPixel wäre überflüssig...



  • ... und nicht vergessen, den DC und das Bitmap am Ende wieder freizugeben!



  • ... und wissen: SetPixel() ist 1000 mal langsamer als Get/SetDIBits() - jedenfalls für längere Operationen. Glaub's mir!



  • ... und wissen: Get/SetDIBits() ist 1000 mal langsamer als die Grafikroutinen der WinGdiEx. Und auch nicht einfach zusammengeklaut wie dein(?) RegionBuilder. Glaub's mir!



  • Du dummes A-r-s-c-h-l-o-c-h!!! Mein RegionBuilder ist alles andere als zusammengeklaut! Die Funktionen von der Windows Skinning-Seite waren nicht mal richtig! Du bist ja nur neidisch, weil du so etwas Tolles nicht kannst. 😃 Du dummer kleiner Trottel!
    Die WinGdiEx macht sicher auch nichts anderes als Get/SetDIBits() zu verwenden. Aber sowas weißt du kleiner Idiot ja nicht.



  • also, da muss ich WebFritzi jetzt mal recht geben. 🕶 Ich find's auch cool, wie er dich zum Idioten macht. 😃 Ich mach einfach mal mit. 😃 Du bist sicher einer, der zu hause sitzt und die typen hasst, die sowas so gut können, weil dus nicht Kannst. Alleine schon dein name ist peinlich. 😡 Du A-r-s-c-h-l-o-c-h!!!!! 😡 Hehe. 😃



  • Danke für deine Unterstützung, aber ich schaff das schon alleine. 🕶



  • @WebFritzi: Sieh dir mal die Dokumentation zur WinGdiEx an. Da gibt's auch eine Funktion BitmapToRegion. Ist nicht nur bedeutend kleiner und schneller als dein abgeschriebener Krams, arbeitet auch fehlerfrei.

    Falls du den Zugriff auf die Quelltexte wünscht, poste hier!



  • Original erstellt von <JSFreak>:
    **@WebFritzi: Sieh dir mal die Dokumentation zur WinGdiEx an. Da gibt's auch eine Funktion BitmapToRegion. Ist nicht nur bedeutend kleiner und schneller als dein abgeschriebener Krams, arbeitet auch fehlerfrei.

    Falls du den Zugriff auf die Quelltexte wünscht, poste hier!**

    Aha, das klingt doch schonmal ein kleines bisschen netter. Mein Krams ist wie gesagt nicht abgeschrieben. Ich hab die Funktionen, die da nagegeben waren alle nochmal überarbeiten müssen, weil da einige Fehler drin waren (u.a. bei Set/GetDIBits()). BitmapToRegion() aus der LIB würde ich mir aber gerne mal anschauen.



  • Hab mir die Doku zu der Funktion mal angeschaut. Klingt nicht gerade so, als des schneller. Der geht ja auch die ganze Maske durch, Pixel für Pixel, und erstellt so seine Region. OK, es gibt 2 Abfragen pro Pixel weniger, da es eine Schwarz-Weiß-Maske ist. Aber das dürfte die Geschwindigkeit nicht allzusehr erhöhen. Aber vielleicht macht er es ja mit der Funktion ExtCreateRegion(). Das ist sicher schneller als andauernd CombineRgn() aufzurufen, so wie ich es mache. Wenn du den Quellcode hast, dann würde es mich sehr freuen, wenn du mir den mal zumailen könntest.


Anmelden zum Antworten