• C# ICON和Image互转


    1.ICON转Image

    Icon icon = Icon.ExtractAssociatedIcon(@"D:XXXXVSLogo.ico");
    MemoryStream mStream = new MemoryStream();
    icon.Save(mStream);
    Image image = Image.FromStream(mStream);

    2.Image转ICON

     1      /// <summary>
     2         /// 转换Image为Icon
     3         /// </summary>
     4         /// <param name="image">要转换为图标的Image对象</param>
     5         /// <param name="nullTonull">当image为null时是否返回null。false则抛空引用异常</param>
     6         /// <exception cref="ArgumentNullException" />
     7         /// <returns></returns>
     8         public static Icon ConvertToIcon(Image image, bool nullTonull = false)
     9         {
    10             if (image == null)
    11             {
    12                 if (nullTonull)
    13                 {
    14                     return null;
    15                 }
    16                 throw new ArgumentNullException("Image is null");
    17             }
    18 
    19             using (MemoryStream msImg = new MemoryStream(), msIco = new MemoryStream())
    20             {
    21                 image.Save(msImg, ImageFormat.Png);
    22 
    23                 using (var bin = new BinaryWriter(msIco))
    24                 {
    25                     //写图标头部
    26                     bin.Write((short)0);           //0-1保留
    27                     bin.Write((short)1);           //2-3文件类型。1=图标, 2=光标
    28                     bin.Write((short)1);           //4-5图像数量(图标可以包含多个图像)
    29 
    30                     bin.Write((byte)image.Width);  //6图标宽度
    31                     bin.Write((byte)image.Height); //7图标高度
    32                     bin.Write((byte)0);            //8颜色数(若像素位深>=8,填0。这是显然的,达到8bpp的颜色数最少是256,byte不够表示)
    33                     bin.Write((byte)0);            //9保留。必须为0
    34                     bin.Write((short)0);           //10-11调色板
    35                     bin.Write((short)32);          //12-13位深
    36                     bin.Write((int)msImg.Length);  //14-17位图数据大小
    37                     bin.Write(22);                 //18-21位图数据起始字节
    38 
    39                     //写图像数据
    40                     bin.Write(msImg.ToArray());
    41 
    42                     bin.Flush();
    43                     bin.Seek(0, SeekOrigin.Begin);
    44                     return new Icon(msIco);
    45                 }
    46             }
    47         }

    本文来自博客园,作者:ganjiqi,转载请注明原文链接:https://www.cnblogs.com/ganjiqi/p/13300059.html

  • 相关阅读:
    文件传输, socketserver模块
    模拟ssh, hashlib模块, struct模块, subprocess模块
    面向对象多继承, 网络基础, 编写网络相关的程序
    主动调用其他类的成员, 特殊成员
    约束, 自定义异常, hashlib, logging
    isinstance / issubclass / type, 方法和函数, 反射
    类的成员和嵌套(建模)
    面向对象
    模块和包
    异常处理
  • 原文地址:https://www.cnblogs.com/ganjiqi/p/13300059.html
Copyright © 2020-2023  润新知