『QQ:1353814576』

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


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

ico的应用场景

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

在线PNG、JPG转ICO工具

图片转ico的c#代码实现

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();
                            }
                        }
                    }
                }
            }
}