Can you convert a System.Windows.Control.Image to a System.Drawing.Icon?

匿名 (未验证) 提交于 2019-12-03 08:57:35

问题:

The title of the question pretty much states the problem. Is it possible?

回答1:

As an alternative, I've used the hints found 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()); } 


回答2:

I modified an example from here. This seems to work pretty good.

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


回答3:

We had this problem a couple of months back and we found this solution

http://www.dreamincode.net/code/snippet1684.htm

I'm sooo glad that we insert references in our comments to where we found something. I prefer sending this to you instead of my code because it's merge with a get multiple zipped file which complexify what you really want to get at.



回答4:

I made from your code a WPF XAML IValueConverter Class that converts a byte() array with an image to an Icon , here is the code :

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 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!