Как скопировать один графический объект в другой

Я пытаюсь скопировать содержимое одного графического объекта в другой, но единственное, что мне удалось найти, основано на использовании GDI32.DLL, которое я бы предпочел по возможности избегать.

Кто-нибудь знает, как / возможно ли это с помощью управляемого кода? Я не против, если ответы будут на C# или VB.Net.

Вот что у меня сейчас есть:

Private Sub CopyGraphics()
    Dim srcPic As Graphics = pnl.CreateGraphics

    Dim srcBmp As New Bitmap(pnl.Width, pnl.Height, srcPic)
    Dim srcMem As Graphics = Graphics.FromImage(srcBmp)

    Dim HDC1 As IntPtr = srcPic.GetHdc
    Dim HDC2 As IntPtr = srcMem.GetHdc

    BitBlt(HDC2, 0, 0, pnl.Width, pnl.Height, HDC1, 0, 0, 13369376)

    pnlDraw.BackgroundImage = srcBmp

    'Clean Up code omitted...
End Sub

Ответов (1)

Решение

Строго говоря, невозможно скопировать содержимое объекта Graphics куда-либо с помощью любого метода, потому что объект Graphics ничего не содержит.

Почему бы не использовать метод DrawToBitmap для рисования элемента управления на растровом изображении?

Dim srcBmp As New Bitmap(pnl.Width, pnl.Height)
Dim clip As New Rectangle(New Point(0, 0), pnl.Size)
pnl.DrawToBitmap(srcBmp, clip)