0

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

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

PS:我需要透明保存ICO

这就是我调用proc的方式:

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

这是代码的资源

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
4

2 回答 2

2

正如文档中所说:

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

图标不支持 Alpha 通道。图标透明度以不同的方式实现。Save 方法尽最大努力保持您正在创建的结构完好无损,因此 PNG 结果。

于 2013-07-18T06:53:39.030 回答
1

编辑应用程序中的“另存为”总是意味着转换,您在这里没有这样做。

例如,您可以使用Bitmap.GetHicon 方法将源转换为图标格式,并从那里使用System.Drawing 图标类。不要忘记在那Hicon之后销毁。

问题是,如果我没记错的话,这就是 .NET Framework 离开你的地方。我不记得透明功能了,几年前我已经切换到FreeImage库,并且从那时起就开始使用它。

于 2013-07-18T07:45:42.440 回答