Сохраните изображение из PictureBox в заданную папку c, когда фотография будет загружена в Picbox - PullRequest
0 голосов
/ 04 мая 2020

System.ArgumentException: 'Параметр недействителен.'

Я получаю эту ошибку в этой строке

safecopy.Save(path + "\MainPic\" + fullname + ".png", Imaging.ImageFormat.Png)

Вот мой код:

Private Sub btnUploadPhoto_Click(sender As Object, e As EventArgs) Handles btnUploadPhoto.Click
    Dim getlastname As String = tboxLastName.Text
    Dim getfirstname As String = tboxFirstName.Text
    Dim getmidname As String = tboxMiddleName.Text
    Dim fullname As String = getlastname + getfirstname + getmidname
    Dim pcusername As String = GetUserName()
    Dim path As String = "C:\Users\" + pcusername + "\Documents\RMS\Photos" + fullname
    If ofdUploadPhotoMain.ShowDialog() = DialogResult.OK Then
        PicBoxMain.SizeMode = PictureBoxSizeMode.Zoom
        PicBoxMain.ImageLocation = ofdUploadPhotoMain.FileName 'Display in PictureBox
        If Not System.IO.Directory.Exists(path) Then
            System.IO.Directory.CreateDirectory(path)
        End If
        Dim safecopy As Bitmap
        Dim mainpic As New Bitmap(ofdUploadPhotoMain.FileName)
        safecopy = mainpic
        mainpic.Dispose()
        safecopy.Save(path + "\MainPic\" + fullname + ".png", Imaging.ImageFormat.Png)
        safecopy.Dispose()
    End If
End Sub

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

Отправить справку!

Спасибо.

1 Ответ

0 голосов
/ 04 мая 2020

Вы, очевидно, думаете, что это делает что-то, чего нет:

safecopy = mainpic

Все, что делает, - устанавливает safecopy для ссылки на тот же объект Bitmap, что и mainpic. Там нет копии. Следующая строка располагает этот объект Bitmap, поэтому, конечно, вы не сможете его использовать. Избавьтесь от второй переменной. Просто создайте объект, сохраните его и затем удалите его:

Using pic As New Bitmap(ofdUploadPhotoMain.FileName)
    pic.Save(IO.Path.Combine(path, "MainPic", fullname + ".png"), Imaging.ImageFormat.Png)
End Using

РЕДАКТИРОВАТЬ:

Я только что протестировал этот код и получил общую ошибку c GDI +:

Using ofd As New OpenFileDialog
    If ofd.ShowDialog() = DialogResult.OK Then
        Dim fullName = String.Concat("LastName", "FirstName", "MiddleName")
        Dim folderPath = Path.Combine(My.Computer.FileSystem.SpecialDirectories.MyDocuments,
                                      "RMS\Photos\MainPic",
                                      fullName & ".png")
        Dim picture = Image.FromFile(ofd.FileName)

        picture.Save(filePath)
        PictureBox1.Image = picture
    End If
End Using

В этом случае папка, указанная в пути, не существует. Я изменил это на это:

Using ofd As New OpenFileDialog
    If ofd.ShowDialog() = DialogResult.OK Then
        Dim fullName = String.Concat("LastName", "FirstName", "MiddleName")
        Dim folderPath = Path.Combine(My.Computer.FileSystem.SpecialDirectories.MyDocuments,
                                      "RMS\Photos\MainPic")

        Directory.CreateDirectory(folderPath)

        Dim filePath = Path.Combine(folderPath, fullName & ".png")
        Dim picture = Image.FromFile(ofd.FileName)

        picture.Save(filePath)
        PictureBox1.Image = picture
    End If
End Using

, и изображение было сохранено и отображено как ожидалось. Вопрос, вероятно, то же самое для вас. Обратите внимание, как я создал путь. Вы должны сделать то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...