让代码更简单

C#、VB.Net png、jpg图片转ico图标

重要:本文最后更新于2022-12-12 08:58:41,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗

看到一个C#、VB .Net png、jpg图片转ico图标的程序,实现的原理比较简单,要实现此功能需要一些图像编码头部信息的知识。只要改写这部分,图像类型也会随之变化。

复制
/// <summary>
/// 图片转换为ico文件
/// </summary>
/// <param name="origin">原图片路径</param>
/// <param name="destination">输出ico文件路径</param>
/// <param name="iconSize">输出ico图标尺寸,不可大于255x255</param>
/// <returns>是否转换成功</returns>
public bool ConvertImageToIcon(string origin, string destination, Size iconSize)
{
    if (iconSize.Width > 255 || iconSize.Height > 255)
    {
        return false;
    }
    Image image = new Bitmap(new Bitmap(origin), iconSize); //先读取已有的图片为bitmap,并缩放至设定大小
    MemoryStream bitMapStream = new MemoryStream(); //存原图的内存流
    MemoryStream iconStream = new MemoryStream(); //存图标的内存流
    image.Save(bitMapStream, ImageFormat.Png); //将原图读取为png格式并存入原图内存流
    BinaryWriter iconWriter = new BinaryWriter(iconStream); //新建二进制写入器以写入目标图标内存流
                                                            /**
                                                             * 下面是根据原图信息,进行文件头写入
                                                             */
    iconWriter.Write((short)0);
    iconWriter.Write((short)1);
    iconWriter.Write((short)1);
    iconWriter.Write((byte)image.Width);
    iconWriter.Write((byte)image.Height);
    iconWriter.Write((short)0);
    iconWriter.Write((short)0);
    iconWriter.Write((short)32);
    iconWriter.Write((int)bitMapStream.Length);
    iconWriter.Write(22);
    //写入图像体至目标图标内存流
    iconWriter.Write(bitMapStream.ToArray());
    //保存流,并将流指针定位至头部以Icon对象进行读取输出为文件
    iconWriter.Flush();
    iconWriter.Seek(0, SeekOrigin.Begin);
    Stream iconFileStream = new FileStream(destination, FileMode.Create);
    Icon icon = new Icon(iconStream);
    icon.Save(iconFileStream); //储存图像
                               /**
                                * 下面开始释放资源
                                */
    iconFileStream.Close();
    iconWriter.Close();
    iconStream.Close();
    bitMapStream.Close();
    icon.Dispose();
    image.Dispose();
    return File.Exists(destination);
}

以上代码适用与.net环境,使用方法如下

复制
bool b = ConvertImageToIcon(@"E:\1.png", @"E:\1.ico", new Size(64, 64));

以上内容来自网友博客,没测试过。

感觉很棒!可以赞赏支持我哟~

0 打赏

评论 (0)

登录后评论
QQ咨询 邮件咨询 狗哥推荐