将位图保存到ICO文件,具有透明度

时间:2013-07-17 23:09:15

标签: .net vb.net bitmap icons gdi+

我正在尝试将位图保存为ico文件格式,但结果文件是PNG图像,扩展名更改为“ico”。

如果我选择了Icon格式,为什么ImageFormat类将我的Bitmap保存为PNG格式?然后如何保存ico文件?

PS:我需要保存ICO的透明度

这就是我所说的proc:

Save_Icon(Resize_Image(Bitmap.FromFile(PictureBox_Regedit.Tag), 24, 24), "Regedit.ico")

这是代码的res

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(Width), CInt(Height))
    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

2 个答案:

答案 0 :(得分:2)

正如in the documentation所述:

  

当您调用MakeTransparent时,位图将转换为   Format32bppArgb格式,因为此格式支持alpha通道。

图标不支持Alpha通道。图标透明度以不同的方式实现。 Save方法尽力保持您正在创建的结构,从而保持PNG结果。

答案 1 :(得分:1)

编辑应用程序中的“另存为”始终意味着转换,您在此处没有这样做。

您可以使用Bitmap.GetHicon Method将源转换为图标格式,然后使用System.Drawing Icon Class。不要忘记在此之后销毁Hicon

问题是,如果我没记错的话,这就是.NET Framework离开你的地方。我不记得透明度功能,几年前我已经切换到FreeImage库,并且从那以后就做了所有事情。