Flotte Alternative TransparentBlt



  • hallo alle zusammen,

    Ich habe wiedermal an meiner Bildverarbeitungsanwendung rumbasteln müssen, weil ich damit jetzt riesen Bitmaps anzeigen und bearbeiten muß ( je 20496 x 2000 Pixel bei 24Bit Farbtiefe ).
    Ich habe das ganze soweit optimiert das es recht Flott funktionier, aber es giebt ein Problem, wenn ich TransparentBlt verwende:

    TransparentBlt( pDC->m_hDC, m_rDestRect.left, m_rDestRect.top, m_rDestRect.right - m_rDestRect.left, m_rDestRect.bottom - m_rDestRect.top, m_OffScreenMemDC.m_hDC, m_rSourceRect.left, m_rSourceRect.top, m_rSourceRect.right - m_rSourceRect.left, m_rSourceRect.bottom - m_rSourceRect.top, 0x00000000 );
    

    wenn m_rDestRect < rSourceRect - sprich Zoomfaktor kleiner als 1, dann wird nicht geblittet und ich bekomme mit GetLastError() einen Errorcode 87 (Falscher Parameter).
    alle Alternativen zu TransparentBlt sind zu langsam.
    In m_OffScreenMemDC befindet sich ein Offscreen Bitmap, in das ich Overlays einzeichne. Ich muß dessen Inhalt also irgendwie drüberlegen.

    In einer früheren Version habe ich einfach das anzuzeigende Bitmap mit CopyImage() kopiert und dann da reingemalt -> ist aber halt jetzt zu langsam.

    Bin für jeglichen Lösungsansatz dankbar. Ich möchte die Overlays ungerne selber malen, da ich sie sonst auch selber skalieren muß (ändern des Zooms) und so wird das wunderbar beim Blitten erledigt.

    Danke



  • Klarer Fall von - Wer (MSDN) lesen kann ist klar im Vorteil:

    StretchBlt(..) mit dwRop = SRCPAINT löst das Problem. Damit halte ich mein Programm auch unter win95 und NT lauffähig Juhu !


Anmelden zum Antworten