.NET环境下c#实现图片PNG、JPG转ico,可用于程序logo图标

354
补充展位 Pages_Weblog_Get#0
文章摘要
此内容由人工摘要内容,并由AI根据文章内容进行润色
暂无内容

ico的应用场景

最近一直在开发桌面的wpf程序应用,加上之前也一直在开发控制台类型的桌面程序,掐指一算一个单业务项目正常运行下来得部署8个+的窗口同时跑,之前每次发布一个程序就会单独做一个app图标加以区分方便维护,图标都是在网上找工具弄的,这次就想着自己做一个方便自己使用 一方面可以实践下,另一方面原因也是不想看成堆的页面广告。 ~~工具成品就是博客工具箱里的《Ico图标在线生成工具》(已下架) ~~

.NET环境下c#实现图片PNG、JPG转ico,可用于程序logo图标

最开始开发在线ico转换工具是考虑用javascript + canvas进行纯前端方式实现以节省服务器资源,但是做好后发现这钟方式生成的ico图标 虽然可以正常打开也可以作为网站图标来使用,但是导入exe项目作为图标是会报错提示 不包含标准的图标流, 尝试多次依然无法解决最后选择了用后端服务器用.net进行转换完成后返回给前端 。

图片转ico的c#代码实现

tips:经过测试可以作为应用程序的图标使用

public static byte[] ConvertImageToIcon(this Image origin, int size)
{
     if (size > 255 || size > 255)
     {
         return null;
     }
     Size iconSize = new Size(size, size);
     using (Image image = new Bitmap(origin, iconSize))
     {
          using (MemoryStream bitMapStream = new MemoryStream())
          {
               using (MemoryStream iconStream = new MemoryStream())
               {
                   image.Save(bitMapStream, ImageFormat.Png); //将原图读取为png格式并存入原图内存流
                   using (Stream iconFileStream = new MemoryStream())
                   {
                       using (BinaryWriter iconWriter = new BinaryWriter(iconStream))
                       {
                           //vs识别读取不出来可能就是因为这里
                           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);
                           Icon icon = new Icon(iconStream);
                           icon.Save(iconFileStream); //储存图像
                           iconFileStream.Seek(0, SeekOrigin.Begin);
                           /**下面开始释放资源**/
                           iconStream.Close();
                           bitMapStream.Close();
                           icon.Dispose();
                           image.Dispose();
                           return iconFileStream.ConvertToBytes();
                       }
                   }
               }
          }
     }
}
补充展位
Pages_Weblog_Get#3a591442-18c9-4fed-ae06-aeba0174fb0b
补充展位 Pages_Weblog_Get#1
补充展位 Pages_Weblog_Get#2
专题推荐
暂无内容
补充展位 Pages_Weblog_Get#3