Как скопировать один графический объект в другой - PullRequest
4 голосов
/ 28 февраля 2009

Я пытаюсь скопировать содержимое одного графического объекта в другой, но единственное, что мне удалось найти, - это использование 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 Ответ

5 голосов
/ 28 февраля 2009

Строго говоря, невозможно скопировать содержимое объекта 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)
...