Bitmap.LockBits()



  • Hallo!

    Um bestimmte Operationen an Bitmaps schneller durchführen zu können habe ich mich entschlossen die Bits in eine DIBSection zu kopieren. Im Moment mache ich das so, indem ich zuerst das Bild mit Bitmap.FromFile() lade, danache mit Bitmap.GetHBitmap() mir einen Handle besorge, den ich dann verwende um das Bild mit BitBlt() in ein (mit CreateDIBSection()) angelegtes) DIB zu übertragen.
    Das Problem hierbei ist, dass es insgesamt drei Kopieroperationen gibt:
    1. das Bitmap wird in den Speicher geladen
    2. das Bitmap wird in ein HBITMAP kopiert
    3. das HBITMAP wird in ein DIB gezeichnet

    Gibt es nicht einen Weg das ganze etwas schneller zu machen? Der zweite Schritt sieht ziemlich überflüssig aus. Man kann ja mit Bitmap.LockBits() an die einzelnen Bits herankommen, die Frage ist nur, wie ich von diesen Bits dann einen Handle (HBITMAP) bekomme und ob ich den Speicher dann einfach mit DeleteObject() freigeben kann oder ob ich Bitmap.UnlockBits() verwenden muss.



  • weiss nicht ob Dir das was hilft denk du hast das auch schon gefunden.
    Ich zähle dort nur 2mal Copy. Ich hoffe es passt überhaupt zu Deiner problemstellung?

    http://msdn2.microsoft.com/en-us/library/5ey6h79d.aspx

    mfg



  • Warum machst du die Operationen die du an der DibSection machst nicht gleich mit den Daten, die LockBits() liefert ?



  • Also erst mal Danke, das war ein gute Lösungsansatz.
    Ich denke mittlerweile habe ich eine vollständige Lösung gefunden:
    Ich erstelle eine DIB Section, mache dann LockBits() und kopiere schließlich die Bits mit einer eigenen Methode "verkehrt" (d.h. das Bitmap wird vertikal geflippt um) in die DIB Section. So habe ich nur ein Mal Copy wenn das Pixel Format des Bitmaps und der DIB Section zusammen stimmen.

    Warum verändere ich die Bits, die ich von LockBits bekomme? - Wenn ich das machen würde müsste ich das Bitmap mit Graphics.DrawImage() zeichnen und der ganze Geschwindigkeitsvorteil wäre verloren. Die DIB Section kann ich mit BitBlt viel schneller zeichnen.


Anmelden zum Antworten