.net6 发布了也有一段时间了 闲来无聊
起因:时不时需要讲图片转为ico格式 感觉每次都找网站 下载软件很麻烦
刚好用.net6 练练手 自己写了个
看vs 2022 提示 好像只能在Windows平台运行(说好的跨平台,可能是引用的包的问题) 就自己打包了一个32位的
附上代码 自己看一看吧
使用方式 :将源图片直接拖到exe上 自动转换格式存到原路径
想要什么样的自己根据源码改吧
[C#] 纯文本查看 复制代码 using System.Drawing;
using System.Drawing.Imaging;
if (args.Length > 0)//读取拖入文件的路径
{
FileInfo fileInfo = new FileInfo(args[0]);
Console.WriteLine("拖入是的文件名是:" + fileInfo.FullName);
ConvertImageToIcon(fileInfo.FullName, fileInfo.FullName.Split('.')[0] + ".ico", new Size(128, 128));
}
/// <summary>
/// 图片转换为ico文件
/// </summary>
/// <param name="origin">原图片路径</param>
/// <param name="destination">输出ico文件路径</param>
/// <param name="iconSize">输出ico图标尺寸,不可大于255x255</param>
/// <returns>是否转换成功</returns>
static bool ConvertImageToIcon(string origin, string destination, Size iconSize)
{
if (iconSize.Width > 255 || iconSize.Height > 255)
{
return false;
}
using (var image = new Bitmap(new Bitmap(origin), iconSize))
{
//存原图的内存流
using var bitMapStream = new MemoryStream();
using var iconStream = new MemoryStream();
image.Save(bitMapStream, ImageFormat.Png); //将原图读取为png格式并存入原图内存流
using (var 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);
using (var iconFileStream = new FileStream(destination, FileMode.Create))
{
using var icon = new Icon(iconStream);
icon.Save(iconFileStream); //储存图像
}
}
}
return File.Exists(destination);
}
|