VB. Net Метафайл генерирует ошибку («Общая c ошибка произошла в GDI +») - PullRequest
0 голосов
/ 09 июля 2020

Я хотел бы получить от вас небольшую помощь. Я работаю над создателем диаграмм, который можно вызывать больше одного раза. Диаграмма каждый раз отличается от более ранней версии, но я хотел бы использовать то же имя файла. Проблема в том, что когда я нажимаю кнопку, программа показывает форму диаграммы с диаграммой в окне изображения, но если форма закрыта, и я снова нажимаю на кнопку, у меня появляется ошибка («Произошла общая c ошибка в GDI + "). Я думаю, что mf.dispose () не закрывает файл, а открывается. Как вы думаете, в чем проблема, как ее решить?

Основная форма:

Imports System.Runtime.InteropServices
Imports System.Drawing.Imaging

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Diagram.create_diagram()
        Diagram_FORM.PictureBox1.Image = New Metafile("c:\temp\test.wmf")
        Diagram_FORM.Show()
    End Sub

Класс диаграммы:


Imports System.Runtime.InteropServices
Imports System.Drawing.Imaging

Class Diagram

Public Sub create_diagram()
        Dim diagram_width As Integer = 600
        Dim diagram_Height As Integer = 600
        Dim filename As String = "c:\temp\test.wmf"
        
        Dim gr As Graphics
        gr = Graphics.FromImage(New Bitmap(diagram_width, diagram_Height))

        ' Make a Graphics object so we can use its hDC as a reference.
        Dim hdc As IntPtr = gr.GetHdc


        ' Make the Metafile, using the reference hDC.
        Dim bounds As New RectangleF(0, 0, Diagram_WidthSize, Diagram_HeightSize)
        Dim mf As New Metafile(filename, hdc, bounds, MetafileFrameUnit.Pixel)

        gr.ReleaseHdc(hdc)

        ' Make a Graphics object and draw.
        gr = Graphics.FromImage(mf)
        gr.PageUnit = GraphicsUnit.Pixel
        gr.Clear(Color.White)

        draw_diagram_background(gr)
        draw_diagram_curve(gr)

        gr.Dispose()
        mf.Dispose()

    End Sub

Private Sub draw_diagram_background(Byval gr as Graphics)

     'some code

End Sub

Private Sub draw_diagram_curve(Byval gr as Graphics)

    'some code

End Sub

End Class

...