我正在尝试在PictureBox中显示图像。
用户将我/她的照片输入我复制到应用程序文件夹(“图像”)。当我尝试显示“图片”文件夹中的路径时,它始终返回空白。
picturepath
是我用来在数据库中存储路径的变量。
If openFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
Try
PicturePath = "/images/" + correctfilename
FileToCopy = openFileDialog1.FileName
NewCopy = "C:\Users\nilraj\source\repos\caloriecal\caloriecal\Images\sss.jpg"
path = Application.StartupPath.Substring(0, (Application.StartupPath.Length - 10))
correctfilename = System.IO.Path.GetFileName(openFileDialog1.FileName)
System.IO.File.Copy(FileToCopy, path + "/Images/" + correctfilename)
myStream = openFileDialog1.OpenFile()
If (myStream IsNot Nothing) Then
TextBoxPictureFilePath.Text = ""
img = openFileDialog1.FileName
PictureBox1.Image = System.Drawing.Bitmap.FromFile(img)
TextBoxPictureFilePath.Text = openFileDialog1.FileName
End If
Catch Ex As Exception
MessageBox.Show("Cannot read file from disk. Original error: " & Ex.Message)
Finally
If (myStream IsNot Nothing) Then
myStream.Close()
End If
End Try
End If
答案 0 :(得分:0)
我建议使用Path.Combine来构建路径。
您的应用程序目录由Application.StartupPath返回,您只需要将此路径与选择的子路径结合起来即可在其中引用或创建目录。
然后可以将此路径与OpenFileDialog.SafeFileName(文件名中不包含Path部分)组合,以创建最终的目标Path(尽管Path.Combine
可以组合两个以上的组件一次,但此处不带文件名的路径用于验证目标目录是否存在,如果不存在,则创建它。您可以将此代码移到其他位置。
请注意,我在这里使用的是OpenFileDialog
类,而不是Control。如果需要,可以用 ofd
替换 openFileDialog1
对象。
记住要过滤要处理的图像类型。
Dim ofd = New OpenFileDialog()
If ofd.ShowDialog() <> DialogResult.OK Then Return
Try
Dim saveFilePath = Path.Combine(Application.StartupPath, "Images")
If Not Directory.Exists(saveFilePath) Then Directory.CreateDirectory(saveFilePath)
Dim saveFileName = Path.Combine(saveFilePath, ofd.SafeFileName)
File.Copy(ofd.FileName, saveFileName, True)
PictureBox1.Image?.Dispose()
PictureBox1.Image = New Bitmap(saveFileName, True)
TextBoxPictureFilePath.Text = ofd.FileName
Catch IOEx As IOException
MessageBox.Show("Cannot read file from disk. Original error: " & IOEx.Message)
Finally
ofd.Dispose()
End Try
如果使用的VB.Net
版本不能使用以下语法: PictureBox1.Image?.Dispose()
,请使用:
If PictureBox1.Image IsNot Nothing Then PictureBox1.Image.Dispose()
由于图像的相对路径相同([Application.StartupPath]\Images
与 saveFilePath
相同),因此您可以仅将图像文件名存储在数据库中,然后合并具有该路径的文件名。
将此路径分配给字段,然后将其与数据库中存储的任何图像文件名结合使用以访问位图。