[SOLUCIONADO] Problema al convertir Bitmap a Ico

Iniciado por Eleкtro, 18 Julio 2013, 06:57 AM

0 Miembros y 1 Visitante están viendo este tema.

Eleкtro

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:
Código (vbnet) [Seleccionar]
Save_Icon(Resize_Image(Bitmap.FromFile(PictureBox_Regedit.Tag), "Regedit.ico")

Y esto es el resto del code:
Código (vbnet) [Seleccionar]
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.








Eleкtro

#1
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:

Código (vbnet) [Seleccionar]
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