我正在为应用程序创建安装程序,但是在将png文件从资源复制到本地文件夹时遇到问题。
我尝试了诸如file.copy file.writeallbytes之类的常规操作,但似乎没有任何效果。我只会收到错误:位图无法转换为Byte()
If System.IO.File.Exists(FileFolderOther & "\LogoReport.png") = False Then
File.Copy(My.Resources.Logo_Reports, FileFolderOther & "\LogoReport.png", True)
End If
If System.IO.File.Exists(FileFolderOther & "\LogoReport.png") = False Then
File.WriteAllBytes(FileFolderOther & "\LogoReport.png", My.Resources.Logo_Reports)
End If
我想要的是我可以将文件(png,txt等)从my.resources复制到本地文件夹中。
答案 0 :(得分:1)
My.Resources.[SomeImage]
返回一个Image对象。
您可以使用Image.Save方法将映像保存到光盘:
Dim destinationPath = Path.Combine(FileFolderOther, "LogoReport.png")
Using myLogo As Bitmap = My.Resources.Logo_Reports
myLogo.Save("d:\testImage.png", ImageFormat.Png)
End Using
仅在出于某种原因不想覆盖同名文件的情况下才需要File.Exist()
检查。如果该文件存在,它将被覆盖而不会出错。
Using
语句允许处理由ResourceManager工厂创建的图像。如果需要存储该图像,则将其分配给“字段/属性”,并在“表单/所有者类”容器关闭/处理后进行处理。
您已对图像类型(.Png
)进行了硬编码。
也许那是该位图的正确原始格式。相反,如果您不知道资源映像(或任何其他映像)的类型是什么,并且想要保留原始格式,则可以使用Image.RawFormat.Guid属性来派生用于创建位图的编解码器,并确定将Guid与ImageCodecInfo属性进行比较的正确Codec FormatID。
我要添加一个EncoderParameter并将图像质量设置为100%
:
Using myLogo As Bitmap = My.Resources.Logo_Reports
Dim codec As ImageCodecInfo = ImageCodecInfo.GetImageEncoders().
FirstOrDefault(Function(enc) enc.FormatID = myLogo.RawFormat.Guid)
' Assunimg codec is not nothing, otherwise abort
Dim fileName = $"LogoReport.{codec.FormatDescription.ToLower()}"
Dim qualityParam As EncoderParameter = New EncoderParameter(ImageCodec.Quality, 100L)
Dim codecParms As EncoderParameters = New EncoderParameters(1)
codecParms.Param(0) = qualityParam
Dim destinationPath = Path.Combine(FileFolderOther, fileName)
myLogo.Save(destinationPath, codec, codecParms)
End Using
答案 1 :(得分:0)
这已经完成并且我已经正确测试了,但是要知道我已经在项目文件夹“ Debug \ TmpFolder \”内创建了一个名为“ TmpFolder”的新文件夹,然后尝试以下代码:
Private Sub BtbCopyFromResource_Click(sender As Object, e As EventArgs) Handles BtbCopyFromResource.Click
Try
'My.Computer.FileSystem.CurrentDirectory is the function for ===> current Project path, namly to Debug Folder
My.Resources.LogoReports.Save(My.Computer.FileSystem.CurrentDirectory & "\TmpFolder\db3451.png")
MsgBox("Done")
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
希望这对你们所有兄弟有帮助。 ^ _ ^