将ico文件转换为png Visual Basic

时间:2014-04-16 05:21:35

标签: visual-studio-2010

我在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 +中发生了一般性错误。

1 个答案:

答案 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