Экспорт изображения в виде картинки на локальный диск - PullRequest
0 голосов
/ 13 апреля 2020

Я хочу экспортировать изображение в графическом окне в местоположение на жестком диске, это изображение устанавливается в графическое окно из столбца типа изображения в таблице базы данных MS SQL.

Я уже написал следующий код для выполнения этой задачи. Однако я получаю общую ошибку c GDI + по коду попытки перехвата.

Этот код использует изображение в графическом окне в месте, указанном в диалоговом окне сохранения файла.

        Dim fileName As String = exportDialog.FileName
        Dim expImage As Image = picBox.BackgroundImage
        Try
            If expImage IsNot Nothing Then
                expImage.Save(fileName)
                MessageBox.Show("File exported successfully")
            End If
        Catch ex As Exception
            __WRITELOG(ex)
        End Try

Это код, который получает изображение из базы данных и преобразует его для отображения в окне для картинок

        If Not IsDBNull(img) Then
            Using mStream As New MemoryStream(img, 0, img.Length)
                mStream.Write(img, 0, img.Length)
                __IMAGE_FROM_STREAM = Image.FromStream(mStream, True)
                '//This __IMAGE_FROM_STREAM is set as the image into the picturebox & it works....!
            End Using
        End If

Try catch error photo

Я проверил эту проблему, но большинство других получило ошибку GDI + при сохранении файла, который был загружен в Picturebox из расположения на диске, а не из базы данных. И там были решения относительно блокировок диска, которые не относятся к этой ситуации. Любая поддержка / предложения приветствуются.

1 Ответ

1 голос
/ 13 апреля 2020

Я не уверен на 100%, но думаю, что проблема в том, что вы избавляетесь от Stream, из которого вы создаете Image. Обычно хорошо использовать оператор Using, поскольку он означает автоматическое удаление созданного объекта c, но в этом случае это нежелательно. Держите Stream рядом и утилизируйте его только тогда, когда закончите с Image, и утилизируйте его тоже. Например, вы можете создать пользовательский элемент управления, унаследовавший PictureBox и имеющий свойство для источника Stream, что позволит вам сохранить его с Image.

Imports System.IO

Public Class PictureBoxEx
    Inherits PictureBox

    Private _imageStream As Stream

    Public WriteOnly Property ImageStream As Stream
        Set
            _imageStream = Value
            Image = Image.FromStream(Value)
        End Set
    End Property

    Public Sub DisposeImageAndStream()
        Image?.Dispose()
        _imageStream?.Dispose()
    End Sub

End Class
...