Asaf Shazar
Asaf Shazar

Reputation: 1065

Convert ico file to png Visual Basic

I am Looking for Code in VB that convert Ico File to other Format such as: Jpg,JPEG,BMP,PNG

someone know such thing like that?

i tried it:

 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

and that it the error i got: An unhandled exception of type 'System.Runtime.InteropServices.ExternalException' occurred in System.Drawing.dll

Additional information: A generic error occurred in GDI+.

Upvotes: 1

Views: 1789

Answers (1)

Hans Passant
Hans Passant

Reputation: 941635

There is no image codec for icons. It is a pretty non-trivial format that can store multiple images and has 3 bitmaps for each image, one that contains the image pixels and two monochrome bitmaps that indicate which pixels are transparent and which are inverted. The Image class just doesn't have the plumbing in place to fully specify the properties that are needed to faithfully generate an .ico file.

But you're ahead since you want a PNG of JPEG file. You can create a bitmap that has the same size as the icon and draw the icon into that bitmap. A very important and non-trivial selection you need to make is choosing a background color for the image. Required because icons have transparency so you'll see the background on which it is displayed. Some image formats, like JPEG, don't support transparency. You have to pick one, Color.White tends to be okayish since that's the common background color for programs that display icons. You can use Color.Transparent for a PNG image.

Sample code:

    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

Upvotes: 2

Related Questions