Estoy intentando convertir un Bitmap al tipo de imágen Icono (ICO), para guardar esa imágen al disco en formato ICO, pero el resultado que obtengo es un archivo PNG con la extensión modificada a ICO.
¿Porque la Class ImageFormat me guarda la imagen en formato PNG cuando le estoy indicando que me guarde el archivo en formato ICO?.
No conozco otra manera de de guardar una imágen al disco (sin usar librerías o aplicaciones d terceros), ¿Como resuelvo esto?.
¿Acaso hay algo mal en el code?
Esta es la manera en la que estoy usando mi code:
Save_Icon(Resize_Image(Bitmap.FromFile(PictureBox_Regedit.Tag), "Regedit.ico")
Y esto es el resto del code:
Private Sub Save_Icon(ByVal Source As Bitmap, ByVal Filename As String)
Try
If Not Directory.Exists(AppDir) Then Directory.CreateDirectory(AppDir)
If Not Directory.Exists(AppIcons) Then Directory.CreateDirectory(AppIcons)
Source.MakeTransparent()
Source.Save(Path.Combine(AppIcons, Filename), ImageFormat.Icon)
Catch ex As Exception
Throw New Exception(ex.Message)
End Try
End Sub
Private Function Resize_Image(ByVal img As Image, ByVal Width As Int32, ByVal Height As Int32) As Bitmap
Dim Bitmap_Source As New Bitmap(img)
Dim Bitmap_Dest As New Bitmap(CInt(24), CInt(24))
Dim Graphic As Graphics = Graphics.FromImage(Bitmap_Dest)
Graphic.DrawImage(Bitmap_Source, 0, 0, Bitmap_Dest.Width + 1, Bitmap_Dest.Height + 1)
Return Bitmap_Dest
End Function
EDITO: El problema sucede tanto usando "maketransparent" como sin usarlo.
Después de hacer un largo research por Google para buscar la mejor manera de este tipo de conversión, me he dado cuenta que el formato ICO en .NET solo son problemas y es casi imposible hablar de ICO + Transparencia en las Classes del framework, y después de pelear mucho con la librería FreeImage, al final he optado por usar un wrapper de esta lib para .NET, y aquí está el code que hice de prueba, funciona:
Imports FreeImageAPI
'Dim img As FreeImageAPI.FIBITMAP = FreeImage.Load(format, file, FREE_IMAGE_LOAD_FLAGS.ICO_MAKEALPHA)
Public Class Form1
Dim file As String = "C:\Users\Administrador.ELEKTRO-PC\Desktop\auricular 5.png"
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Shown
Dim format As FreeImageAPI.FREE_IMAGE_FORMAT = FreeImage.GetFileType(file, 32)
Dim img As FreeImageAPI.FIBITMAP = FreeImage.LoadEx(file)
Dim Transparency As Byte() = New Byte(0) {}
FreeImage.SetTransparencyTable(img, Transparency)
FreeImage.Save(FREE_IMAGE_FORMAT.FIF_ICO, img, "c:\test.ico", FREE_IMAGE_SAVE_FLAGS.DEFAULT)
End Sub
End Class