返回

使用.NET C#将图片转换为.ico图标文件的多种方法

2025-06-04 .NET C# .ico 3054 0

在Windows应用程序开发中,图标(.ico)文件是不可或缺的一部分。本文将介绍如何使用.NET C#将常见的图片格式(如PNG、JPG、BMP)转换为.ico文件,并提供多种实现方式,包括使用System.Drawing、Magick.NET库的方法。

方法一:使用System.Drawing生成基础图标

这是最简单的方式,适用于快速生成单尺寸图标:

public static Stream? ToFaviconBase64(Stream stream, int width)
{
    try
    {
        using (var originalImage = Image.FromStream(stream))
        {
            using (var resizedBitmap = new Bitmap(originalImage, new Size(width, width)))
            {
                var hIcon = resizedBitmap.GetHicon();
                using (var icon = Icon.FromHandle(hIcon))
                {
                    var result = new MemoryStream();
                    icon.Save(result);
                    return result;
                }
            }
        }
    }
    catch 
    {
        return null;
    }
}

缺点:生成的图标很模糊。测试时使用一个.ico作为原始图,生成的.ico文件颜色失真而且很模糊,所以不建议使用这种方式。

方法二:使用 Magick.NET库生成.ico图标

Magick.NET 是 ImageMagick 的官方 .NET 封装库,允许开发者在 C#、VB.NET 和 .NET Core 应用程序中使用 ImageMagick 的强大图像处理功能,而无需在系统上单独安装 ImageMagick。

Magick.NET 提供多种量子深度版本(如 Q8、Q16 和 Q16-HDRI),以满足不同的图像处理需求。此外,它支持跨平台开发,兼容 Windows、Linux 和 macOS,适用于 .NET Framework、.NET Core 和 .NET 5 及更高版本。

首先,需要通过 NuGet 包管理器安装 Magick.NET。示例种我安装了Magick.NET-Q8-AnyCPU。

使用.NET C#将图片转换为.ico图标文件的多种方法

以下是使用 Magick.NET 将图片转换为指定尺寸的 ICO 文件的示例代码:

public static Stream? ToFaviconBase64(Stream stream, int width)
{
    try
    {
        using (MagickImage originalImage = new MagickImage(stream))
        {
            originalImage.Resize((uint)width, (uint)width);
            var result = new MemoryStream();
            originalImage.Write(result, MagickFormat.Ico);
            return result;
        }
    }
    catch
    {
        return null;
    }
}

运行效果:

使用.NET C#将图片转换为.ico图标文件的多种方法

注意事项

  • 透明度支持:确保原始 PNG 图片具有透明背景,以便在转换后保留透明度。
  • 图标尺寸:可以根据需求调整 auto-resize 参数中的尺寸列表。
  • 性能优化:对于批量处理,建议在循环中复用 MagickImage 实例,以减少资源消耗。

通过 Magick.NET,你可以在 .NET C# 项目中轻松实现图片到 ICO 图标的转换,支持多尺寸和透明度,满足现代应用程序对图标的多样化需求。

顶部