C#图片无损转换为ico格式

/// <summary>
/// 图片转换为ico文件
/// </summary>
/// <param name="origin">原图片路径</param>
/// <param name="destination">输出ico文件路径</param>
/// <param name="iconSize">输出ico图标尺寸,不可大于255x255</param>
/// <returns>是否转换成功</returns>
public static 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);
}



调用函数即可实现转换,例如我这里输出一个128x128的ico文件:

convertImageToIcon(@"C:\Users\swsk33\Pictures\头像与图标\1.png", @"E:\中转\icon.ico", new Size(128, 128));

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QQ359677345

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值