Icon直接保存成ico文件会严重失真,可以保存为png格式。
但如果要转换到byte,直接使用Icon.ToBitmap().Save方法会出错,需要带一点参数。具体代码如下
public class IconHelper
{
/// <summary>
/// Byte转Icon
/// </summary>
/// <param name="buffer"></param>
/// <returns></returns>
public static Icon FromByte(byte[] buffer)
{
return Icon.FromHandle(new System.Drawing.Bitmap(new MemoryStream(buffer)).GetHicon());
}
/// <summary>
/// Icon转Byte
/// </summary>
/// <param name="icon"></param>
/// <returns></returns>
public static byte[] ToByte(Icon icon)
{
Encoder myEncoder = Encoder.Quality;
EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 100);
EncoderParameters encoders = new EncoderParameters(1);
encoders.Param[0] = myEncoderParameter;
ImageCodecInfo myImageCodecInfo = GetEncoderInfo("image/png");
using (MemoryStream ms = new MemoryStream())
{
icon.ToBitmap().Save(ms, myImageCodecInfo, encoders);
return ms.GetBuffer();
}
}
private static ImageCodecInfo GetEncoderInfo(string mimeType)
{
int j;
ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();
for (j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
}