C# 关于图片转ICO的代码整理(无损,不需要第三方类库)
概述(Overview)
感觉网上文章整理的不全,我这边做个专栏,专门做这个事情吧,节省大家搜索、筛选、整理的时间精力。有用可以点个赞。引用本文章请注明出处,谢谢。
(I feel that the online articles are not complete, so I will make a column here to do this thing, so as to save everyone's time and energy in searching, screening, and sorting. If it's useful, you can like it.Please indicate the source for citing this article, thank you.)
代码(Code)
using System;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Windows.Forms; public class ICON
{
/// <summary>
/// 保存为ICO文件
/// </summary>
/// <param name="filePath">文件路径</param>
/// <param name="width">宽度</param>
/// <param name="height">高度</param>
/// <returns>true:成功 false:失败</returns>
public static bool SaveAsICON(string filePath, int width = 0, int height = 0)
{
try
{
//基于源文件路径,仅修改后缀名为ico
string fileDirectory = Path.GetDirectoryName(filePath);
string fileSavePath = Path.Combine(fileDirectory, Path.GetFileNameWithoutExtension(filePath)) + ".ico"; using (Bitmap bm = new Bitmap(filePath))
{
//尺寸范围:【1-255,1-255】
width = width == 0 ? bm.Width : width;
width = width > 255 ? 255 : width; height = height == 0 ? bm.Height : height;
height = height > 255 ? 255 : height; //转换结果
bool isSuccess = ConvertImageToIcon(filePath, fileSavePath, new Size(width, height));
if (!isSuccess)
{
return isSuccess;
}
//转换成功,打开文本保存所在目录
Process.Start("explorer.exe", fileDirectory);
return isSuccess;
}
}
catch (Exception ex)
{
MessageBox.Show("转化失败。错误信息:" + ex.Message);
return false;
}
} /// <summary>
/// 图片转换为ico文件
/// </summary>
/// <param name="origin">原图片路径</param>
/// <param name="destination">输出ico文件路径</param>
/// <param name="iconSize">输出ico图标尺寸,不可大于255x255</param>
/// <returns>是否转换成功</returns>
private static bool ConvertImageToIcon(string origin, string destination, Size iconSize)
{
if (iconSize.Width > 255 || iconSize.Height > 255)
{
return false;
} Bitmap originBMP = new Bitmap(origin);
Image image = new Bitmap(originBMP, 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);//0-1保留
iconWriter.Write((short)1);//2-3文件类型。1=图标, 2=光标
iconWriter.Write((short)1);//4-5图像数量(图标可以包含多个图像)
iconWriter.Write((byte)image.Width);//6图标宽度
iconWriter.Write((byte)image.Height);//7图标高度
iconWriter.Write((short)0);//8颜色数(若像素位深>=8,填0。这是显然的,达到8bpp的颜色数最少是256,byte不够表示) ;9保留。必须为0
iconWriter.Write((short)0);//10-11调色板
iconWriter.Write((short)32);//12-13位深
iconWriter.Write((int)bitMapStream.Length);//14-17位图数据大小
iconWriter.Write(22); //18 - 21位图数据起始字节 //写入图像体至目标图标内存流
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();
originBMP.Dispose();
icon.Dispose();
image.Dispose();
iconFileStream.Dispose(); return File.Exists(destination);
} }
引用
图标(ico,cur)文件的结构解析_ico文件格式解析-CSDN博客
【C#】无损转换Image为Icon - ahdung - 博客园 (cnblogs.com)
C#图片无损转换为ico格式_c# png转32位 ico-CSDN博客
C# 关于图片转ICO的代码整理(无损,不需要第三方类库)的更多相关文章
- material design 的android开源代码整理
material design 的android开源代码整理 1 android (material design 效果的代码库) 地址请点击:MaterialDesignLibrary 效果: 2 ...
- IOS常用代码整理
常用代码整理: 12.判断邮箱格式是否正确的代码: //利用正则表达式验证 -(BOOL)isValidateEmail:(NSString *)email { NSString *emailRege ...
- 史上最全的CSS hack方式一览 jQuery 图片轮播的代码分离 JQuery中的动画 C#中Trim()、TrimStart()、TrimEnd()的用法 marquee 标签的使用详情 js鼠标事件 js添加遮罩层 页面上通过地址栏传值时出现乱码的两种解决方法 ref和out的区别在c#中 总结
史上最全的CSS hack方式一览 2013年09月28日 15:57:08 阅读数:175473 做前端多年,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某些情况我 ...
- 基于CSS3和HTML5图片加工前后对比代码
分享一款CSS3和HTML5图片加工前后对比代码.这是一款通过CSS3和HTML5将图像转换为自动响应的元素:图像缩放和裁剪以适应容器.效果图如下: 在线预览 源码下载 实现的代码. html代码 ...
- Smtp邮件发送系统公用代码整理—总结
1.前言 a.在软件开发中,我们经常能够遇到给用户或者客户推送邮件,推送邮件也分为很多方式,比如:推送一句话,推送一个网页等等.那么在系统开发中我们一般在什么情况下会使用邮件发送呢?下面我简单总结了一 ...
- jQuery图片无缝滚动JS代码ul/li结构
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 实现图片大小的自动控制( 图片大小控制CSS代码)
图片大小控制CSS代码 将以下代码放到你的样式表文件中即可实现图片大小的自动控制. /*图片大小控制CSS By Tekin */img,a img{border:0;margin:0;padding ...
- Java 图片提取RGB数组 RGBOfCharMaps (整理)
package demo; /** * Java 图片提取RGB数组 RGBOfCharMaps (整理) * 声明: * 和ImageCombining配合使用的工具,这里是提取图片的R.G.B生成 ...
- Chrome应用技巧之代码整理。
我们有时候在看别人站点代码时往往是经过压缩的,代码都在一行上了,调试非常是困难,今天给大家介绍一种基本Chrome浏览器的代码整理方法.请看图:
- NSIS常用代码整理
原文 NSIS常用代码整理 这是一些常用的NSIS代码,少轻狂特意整理出来,方便大家随时查看使用.不定期更新哦~~~ 1 ;获取操作系统盘符 2 ReadEnvStr $R0 SYSTEMDRIVE ...
随机推荐
- Centos调整分区存储大小
将/home下900G转移到/目录下 1.查看分区大小:df -hl 2.备份home文件:tar cvf /run/home.tar /home 3.终止home文件进程(切换到非home路径下执行 ...
- Python2同时输出中文和变量时中文乱码
Python2同时输出中文和变量时中文乱码 一.问题描述 最近在学习tensorflow时,突然发现一个问题,python2在输出中文和变量时会出现一点问题,如下图: 可以看到,输出并不是想要的结果, ...
- Pytorch DistributedDataParallel(DDP)教程二:快速入门实践篇
一.简要回顾DDP 在上一篇文章中,简单介绍了Pytorch分布式训练的一些基础原理和基本概念.简要回顾如下: 1,DDP采用Ring-All-Reduce架构,其核心思想为:所有的GPU设备安排在一 ...
- .Net与AI的强强联合:AntSK知识库项目中Rerank模型的技术突破与实战应用
随着人工智能技术的飞速发展,.Net技术与AI的结合已经成为了一个新的技术热点.今天,我要和大家分享一个令人兴奋的开源项目--AntSK,这是一个基于.net平台构建的开源离线AI知识库项目.在这个项 ...
- 打CS2的时候提示 error:unrec stream cmd 2090 82a
打CS2的时候提示 error:unrec stream cmd 2090 82a 打着打着就卡住,然后提示error:unrec stream cmd 2090 82a 找了一圈,进bios把内存条 ...
- 当服务器间通讯出现No route to host(Host unreachable)
服务器间通讯出现No route to host(Host unreachable) 背景:因为某些原因,主机房服务器集体重启,其中部署的系统也需要重启,负责的系统是五台服务器,两台用来作为应用的应用 ...
- SchedulerX 如何帮助用户解决分布式任务调度难题?
简介:本文分别对任务调度平台的资源定义.可视化管控能力.分布式批处理能力进行了简述,并基于 SchedulerX 的能力结合实际业务场景提供了一些基础参考案例.希望通过上述内容能让大家方便地熟悉任务 ...
- [GPT] Nginx+PHP 技术栈 504 Gateway Time-out 解决方案
1. 504 Gateway Time-out 是什么情况? 504 Gateway Time-out 是一种 HTTP 状态码,表示服务器在作为网关或代理时无法从上游服务器(例如应用程序服务器) ...
- keil 中未编译的代码灰色显示
一.转载文章 转载:KEIL,#ifdef宏定义下失效代码差异性显示 注意keil的版本,太低的版本不具备灰色显示,据我所知在KEIL uVersion V5.31版本以上均可以. 二.使能灰色显示 ...
- Surge多配置文件聚合配置方法
目录 摘要 1. Surge配置原理 2. Surge托管配置 3. Surge多配置文件聚合配置 (1)找到配置文件 (2)编辑配置文件 参考 摘要 Surge 是一个在 macOS 和iOS 平台 ...