And a solution seems to be....

Tech-Archive recommends: Fix windows errors by optimizing your registry



Public Sub MyBitBlt(ByVal Dst As PictureBox, ByVal Back As Bitmap, ByVal Src
As Bitmap, ByVal Mask As Bitmap, ByVal X As Long, ByRef Y As Long)

Try

Dim dstHDC As IntPtr = Dst.CreateGraphics.GetHdc

Dim gdiHandleBack As IntPtr = CreateCompatibleDC(dstHDC.ToInt32)
Dim bmHandleBack As IntPtr = Back.GetHbitmap()
SelectObject(gdiHandleBack, bmHandleBack)
Dim backMem As Graphics = Graphics.FromHdc(gdiHandleBack)
Dim backHDC As IntPtr = backMem.GetHdc

Dim gdiHandleMask As IntPtr = CreateCompatibleDC(dstHDC.ToInt32)
Dim bmHandleMask As IntPtr = Mask.GetHbitmap()
SelectObject(gdiHandleMask, bmHandleMask)
Dim maskMem As Graphics = Graphics.FromHdc(gdiHandleMask)
Dim maskHDC As IntPtr = maskMem.GetHdc
BitBlt(backHDC, X, Y, 50, 50, maskHDC, 0, 0,
TernaryRasterOperations.SRCPAINT)

Dim gdiHandleSrc As IntPtr = CreateCompatibleDC(dstHDC.ToInt32)
Dim bmHandleSrc As IntPtr = Src.GetHbitmap()
SelectObject(gdiHandleSrc, bmHandleSrc)
Dim srcMem As Graphics = Graphics.FromHdc(gdiHandleSrc)
Dim srcHDC As IntPtr = srcMem.GetHdc
BitBlt(backHDC, X, Y, 50, 50, srcHDC, 0, 0,
TernaryRasterOperations.SRCAND)

BitBlt(dstHDC, 0, 0, Back.Width, Back.Height, backHDC, 0, 0,
TernaryRasterOperations.SRCCOPY)

srcMem.ReleaseHdc(srcHDC)
maskMem.ReleaseHdc(maskHDC)
backMem.ReleaseHdc(backHDC)
srcMem.Dispose()
maskMem.Dispose()
backMem.Dispose()

Catch ex As Exception
Dim err As String = ex.Message
End Try

End Sub

....didn't take the time to check for memory leaks.

There may be other more efficient solutions.
.



Relevant Pages

  • Re: Race Condition with GDI+
    ... See the GDI+ FAQ on how and where to get Graphics objects. ... > IntPtr wparam, IntPtr lparam) ... > invalidRectangle, Boolean doubleBuffer, AlphaBlendMode alphaBlendMode, ...
    (microsoft.public.dotnet.languages.csharp)
  • Cant StretchBlt an image loaded from my hard drive
    ... int nWidthDest, ... // height of destination rectangle ... IntPtr hdcSrc, ... Graphics gDest = Graphics.FromImage; ...
    (microsoft.public.dotnet.framework.drawing)
  • Re: Problem mit Graphics Objekt
    ... Exception des OP. ... Graphics grfx1; ... IntPtr pointer1; ... public void DoIt1(Graphics grfx, IntPtr pointer) { ...
    (microsoft.public.de.german.entwickler.dotnet.csharp)
  • Cant StretchBlt an image loaded from my hard drive
    ... int nWidthDest, ... // height of destination rectangle ... IntPtr hdcSrc, ... Graphics gDest = Graphics.FromImage; ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: Overriding RichTextBox OnPaint() Problems
    ... However you will find that the graphics that you can get from CreateGraphics ... Protected Overrides Sub WndProc ... IntPtr) As IntPtr ... Public Declare Ansi Function ReleaseDC Lib "User32.dll" (ByVal hWnd As ...
    (microsoft.public.dotnet.framework.windowsforms)