我在VB中寻找将Ico文件转换为其他格式的代码,例如: JPG,JPEG,BMP,PNG
有人知道这样的事吗?我试过了:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim ImageUrl As String
ImageUrl = "C:\Arto.ico"
Dim str As Integer
str = InStr(ImageUrl, ".ico")
If (str > 0) Then
Dim b As New Bitmap(ImageUrl)
Dim newurl = Mid(ImageUrl, 1, Len(ImageUrl) - 4)
newurl = newurl + ".jpg"
b.Save(newurl) <<<<error here
' newurl = Mid()
' b.Save()
End If
End Sub
它是我得到的错误: System.Drawing.dll中发生未处理的“System.Runtime.InteropServices.ExternalException”类型异常
其他信息:GDI +中发生了一般性错误。
答案 0 :(得分:2)
图标没有图像编解码器。这是一个非常重要的格式,可以存储多个图像,每个图像有3个位图,一个包含图像像素,两个单色位图指示哪些像素是透明的,哪些像素是反转的。 Image类没有适当的管道来完全指定忠实生成.ico文件所需的属性。
但是,由于您需要PNG的JPEG文件,因此您处于领先地位。您可以创建与图标大小相同的位图,并将图标绘制到该位图中。您需要做的非常重要和非平凡的选择是为图像选择背景颜色。必需,因为图标具有透明度,因此您将看到显示它的背景。某些图片格式(如JPEG)不支持透明度。你必须选择一个,Color.White往往是好的,因为它是显示图标的程序的常见背景颜色。您可以将Color.Transparent用于PNG图像。
示例代码:
Dim srce = "c:\temp\test.ico"
Dim dest = "c:\temp\test.jpg"
Using ico = New Icon(srce)
Using bmp = New Bitmap(ico.Width, ico.Height)
Using gr = Graphics.FromImage(bmp)
gr.Clear(Color.White) '' NOTE!
gr.DrawIcon(ico, 0, 0)
End Using
bmp.Save(dest, System.Drawing.Imaging.ImageFormat.Jpeg)
End Using
End Using