我有一个逻辑
using (var ms = new MemoryStream())
{
icon.ToBitmap();
var array = ms.GetBuffer();
}
和
using (var ms = new MemoryStream(array))
{
var icon = new Icon(ms);
}
我希望得到一个源图标,但是我得到一个错误颜色的图标。
我该如何解决?
UPD 我有2种方法
public static byte[] ToByteArray(this Icon icon)
{
using (var ms = new MemoryStream())
{
icon.Save(ms);
return ms.GetBuffer();
}
}
public static Icon ToIcon(byte[] bytes)
{
using (var ms = new MemoryStream(bytes))
{
return new Icon(ms);
}
}
诗 MemoryStream.ToArray()也无法正常工作 icon.ToBitmap()返回黑色背景
UPD2:
public static void Func()
{
Icon icon = System.Drawing.Icon.ExtractAssociatedIcon("filename");
var iconBytes = icon.ToByteArray();
//...... SOME LOGIC.......
var restoredIcon = ToIcon(iconBytes);
image.Source = restoredIcon.ToImageSource();
}
public static byte[] ToByteArray(this Icon icon)
{
using (var ms = new MemoryStream())
{
icon.Save(ms);
return ms.GetBuffer();
}
}
public static Icon ToIcon(byte[] bytes)
{
using (var ms = new MemoryStream(bytes))
{
return new Icon(ms);
}
}
public static ImageSource ToImageSource(this Icon icon)
{
ImageSource imageSource = Imaging.CreateBitmapSourceFromHIcon(
icon.Handle,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
return imageSource;
}
答案 0 :(得分:0)
Icon.ToBitmap根据此文档失去透明度:
https://msdn.microsoft.com/en-us/library/windows/apps/system.drawing.icon.tobitmap(v=vs.100).aspx/html
图标的透明区域在转换为位图时会丢失,并且生成的位图的透明色设置为RGB(13,11,12)。返回的位图与原始图标具有相同的高度和宽度。
试试这个,假设图像中没有颜色,在ToBitmap()之后,您可以调用一个语句使该颜色透明:
System.Drawing.Bitmap img = icon.ToBitmap();
img.MakeTransparent(Color.FromArgb(13, 11, 12));