【问题标题】:Save Bitmap to ICO file, with transparency将位图保存到 ICO 文件,具有透明度
【发布时间】:2013-07-17 23:09:15
【问题描述】:

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

如果我选择了图标格式,为什么 ImageFormat 类将我的位图保存为 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

【问题讨论】:

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


    【解决方案1】:

    正如in the documentation所说:

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

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

    【讨论】:

    • 感谢您的回答,但即使不使用“maketransparent”,结果也是一个 PNG 文件。我不知道保存 ICO 的其他方法...
    【解决方案2】:

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

    例如,您可以使用Bitmap.GetHicon Method 将源转换为图标格式,然后从那里使用System.Drawing Icon Class。之后别忘了销毁Hicon

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

    【讨论】:

    • 在 Google 对如何在 .NET 中使用 lib 进行了大量研究后,您是对的,FreeImage 是最好的方式,呵呵,谢谢
    • 只有一件事,我无法打开并编译针对 64 位项目(anycpu 或 x64 配置)的源代码,也许您可​​以链接为 anycpu 和 x64 编译的 freeimage dll,如下所示? :sambeauvois.be/blog/2010/05/…
    • 我自己编译了一个 64 位的版本,但是我添加和更改了一些东西,它是 2010 版本。
    猜你喜欢
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 2011-10-20
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    相关资源
    最近更新 更多