如何将Byte 转换为BitmapImage

我需要帮助,我有这个方法从Byte []获取BitmapImage

public BitmapSource ByteToBitmapSource(byte[] image) { BitmapImage imageSource = new BitmapImage(); using (MemoryStream stream = new MemoryStream(image)) { stream.Seek(0, SeekOrigin.Begin); imageSource.BeginInit(); imageSource.StreamSource = stream; imageSource.CacheOption = BitmapCacheOption.OnLoad; imageSource.EndInit(); } return imageSource; } 

imageSource.EndInit(); 抛出错误“我们发现没有适合完成此操作的成像组件。”

Image.Source设置为XAML中的字节数组属性。

  

如果你真的想要你可以在这样的代码背后做到这一点

  public void DecodePhoto(byte[] byteVal) { if (byteVal == null) { return ; } try { MemoryStream strmImg = new MemoryStream(byteVal); BitmapImage myBitmapImage = new BitmapImage(); myBitmapImage.BeginInit(); myBitmapImage.StreamSource = strmImg; myBitmapImage.DecodePixelWidth = 200; myBitmapImage.EndInit(); MyImage.Source = myBitmapImage; } catch (Exception) { } } 

您应该向我们提供有关您图像的更多信息。
我可以假设它不受系统的支持,我建议你使用外部工具,例如imageMagik或任何其他特定于图像的转换器。

我做了类似的东西,但它不是BitmapImage,希望它可以帮助…

首先,我从一个路径获取图像,所以我得到一个BMP并转换成一个byte []:

 private byte[] LoadImage(string szPathname) { try { Bitmap image = new Bitmap(szPathname, true); MemoryStream ms = new MemoryStream(); image.Save(ms, ImageFormat.Bmp); return ms.ToArray(); }catch (Exception){...} return null; } 

我在我的代码中这样称呼它:

 byte[] bitmapData1 = LoadImage(@"C:\Users\toto\Desktop\test1.bmp"); 

当我想将byte []转换为System.Windows.Controls.Image时,我这样做:

 protected virtual void OnByteArrayChanged(DependencyPropertyChangedEventArgs e) { try { // PropertyChanged method BitmapImage bmpi = new BitmapImage(); bmpi.BeginInit(); bmpi.StreamSource = new MemoryStream(ByteArray); bmpi.EndInit(); System.Windows.Controls.Image image1 = (get my image in my xaml); image1.Source = bmpi; }catch (Exception){...} } 

这也可能有所帮助:

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Drawing; using System.Runtime.InteropServices; using System.IO; using System.ComponentModel; public class MakeBitmapSource { [DllImport("kernel32.dll", EntryPoint = "RtlMoveMemory")] public static extern void CopyMemory(IntPtr Destination, IntPtr Source, uint Length); public static BitmapSource FromNativePointer(IntPtr pData, int w, int h, int ch) { PixelFormat format = PixelFormats.Default; if (ch == 1) format = PixelFormats.Gray8; //grey scale image 0-255 if (ch == 3) format = PixelFormats.Bgr24; //RGB if (ch == 4) format = PixelFormats.Bgr32; //RGB + alpha WriteableBitmap wbm = new WriteableBitmap(w, h, 96, 96, format, null); CopyMemory(wbm.BackBuffer, pData, (uint)(w * h * ch)); wbm.Lock(); wbm.AddDirtyRect(new Int32Rect(0, 0, wbm.PixelWidth, wbm.PixelHeight)); wbm.Unlock(); return wbm; } public static BitmapSource FromArray(byte[] data, int w, int h, int ch) { PixelFormat format = PixelFormats.Default; if (ch == 1) format = PixelFormats.Gray8; //grey scale image 0-255 if (ch == 3) format = PixelFormats.Bgr24; //RGB if (ch == 4) format = PixelFormats.Bgr32; //RGB + alpha WriteableBitmap wbm = new WriteableBitmap(w, h, 96, 96, format, null); wbm.WritePixels(new Int32Rect(0, 0, w, h), data, ch * w, 0); return wbm; } }