【发布时间】:2009-08-26 20:17:11
【问题描述】:
问题的标题几乎说明了问题。有可能吗?
【问题讨论】:
问题的标题几乎说明了问题。有可能吗?
【问题讨论】:
作为替代方案,我使用了 here 找到的提示:
public static Icon Convert(BitmapImage bitmapImage)
{
var ms = new MemoryStream();
var encoder = new PngBitmapEncoder(); // With this we also respect transparency.
encoder.Frames.Add(BitmapFrame.Create(bitmapImage));
encoder.Save(ms);
var bmp = new Bitmap(ms);
return Icon.FromHandle(bmp.GetHicon());
}
【讨论】:
我从here 修改了一个示例。这似乎工作得很好。
public static Icon Convert(BitmapImage bitmapImage)
{
System.Drawing.Bitmap bitmap = null;
var width = bitmapImage.PixelWidth;
var height = bitmapImage.PixelHeight;
var stride = width * ((bitmapImage.Format.BitsPerPixel + 7) / 8);
var bits = new byte[height * stride];
bitmapImage.CopyPixels(bits, stride, 0);
unsafe
{
fixed (byte* pB = bits)
{
var ptr = new IntPtr(pB);
bitmap = new System.Drawing.Bitmap(width, height, stride,
System.Drawing.Imaging.PixelFormat.Format32bppPArgb,
ptr);
}
}
return Icon.FromHandle(bitmap.GetHicon());
}
【讨论】:
几个月前我们遇到了这个问题,我们找到了这个解决方案
http://www.dreamincode.net/code/snippet1684.htm
我很高兴我们在 cmets 中插入了我们发现某些东西的引用。我更喜欢将此而不是我的代码发送给您,因为它与一个获取多个压缩文件合并,这使您真正想要获得的内容变得复杂。
【讨论】:
我从您的代码中创建了一个 WPF XAML IValueConverter 类,该类将带有图像的 byte() 数组转换为 Icon ,代码如下:
Public Class ByteArrayToIconConverter
Implements IValueConverter
' Define the Convert method to change a byte[] to icon.
Public Function Convert(ByVal value As Object, _
ByVal targetType As Type, ByVal parameter As Object, _
ByVal culture As System.Globalization.CultureInfo) As Object _
Implements System.Windows.Data.IValueConverter.Convert
If Not value Is Nothing Then
' value is the data from the source object.
Dim data() As Byte = CType(value, Byte())
Dim ms1 As MemoryStream = New MemoryStream(data)
Dim ms2 As MemoryStream = New MemoryStream()
Dim img As New BitmapImage()
img.BeginInit()
img.StreamSource = ms1
img.EndInit()
Dim encoder As New PngBitmapEncoder()
encoder.Frames.Add(BitmapFrame.Create(img))
encoder.Save(ms2)
Dim bmp As New Bitmap(ms2)
Dim newIcon As Icon = Icon.FromHandle(bmp.GetHicon())
Return newIcon
End If
End Function
' ConvertBack is not implemented for a OneWay binding.
Public Function ConvertBack(ByVal value As Object, _
ByVal targetType As Type, ByVal parameter As Object, _
ByVal culture As System.Globalization.CultureInfo) As Object _
Implements System.Windows.Data.IValueConverter.ConvertBack
Throw New NotImplementedException
End Function
End Class
【讨论】: