积极答复者
关于在 image 中显示 byte[] 像素数据?

问题
答案
-
你好。
可以将byte[] 转换为 MemoryStream,进而转换为BitmapImage,然后由Image控件显示出来。但是要保证byte[] 是一个可以正常显示的数据。
下面提供一下byte[] 和 BitmapImage 之间互相转换的方法:
byte[] -> BitmapImage:
private BitmapImage LoadImage(byte[] imageData) { if (imageData == null || imageData.Length == 0) return null; var image = new BitmapImage(); using (var mem = new MemoryStream(imageData)) { mem.Position = 0; image.BeginInit(); image.CreateOptions = BitmapCreateOptions.PreservePixelFormat; image.CacheOption = BitmapCacheOption.OnLoad; image.UriSource = null; image.StreamSource = mem; image.EndInit(); } image.Freeze(); return image; }
BitmapImage -> byte[]:
public byte[] getJPGFromImageControl(BitmapImage imageC) { MemoryStream memStream = new MemoryStream(); JpegBitmapEncoder encoder = new JpegBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(imageC)); encoder.Save(memStream); return memStream.GetBuffer(); }
为了测试方便,可以使用一张现有图片,转换为byte[],然后由LoadImage方法转换后显示。
- 已标记为答案 Leo (Apple) YangModerator 2014年7月14日 1:33
-
可以通过把现有图片通过getJPGFromImageControl方法转换为byte[],存储下来。
然后使用这个byte[] 数据,通过LoadImage 方法再转换为BitmapImage。
- 已标记为答案 Leo (Apple) YangModerator 2014年7月14日 1:33
全部回复
-
你好。
可以将byte[] 转换为 MemoryStream,进而转换为BitmapImage,然后由Image控件显示出来。但是要保证byte[] 是一个可以正常显示的数据。
下面提供一下byte[] 和 BitmapImage 之间互相转换的方法:
byte[] -> BitmapImage:
private BitmapImage LoadImage(byte[] imageData) { if (imageData == null || imageData.Length == 0) return null; var image = new BitmapImage(); using (var mem = new MemoryStream(imageData)) { mem.Position = 0; image.BeginInit(); image.CreateOptions = BitmapCreateOptions.PreservePixelFormat; image.CacheOption = BitmapCacheOption.OnLoad; image.UriSource = null; image.StreamSource = mem; image.EndInit(); } image.Freeze(); return image; }
BitmapImage -> byte[]:
public byte[] getJPGFromImageControl(BitmapImage imageC) { MemoryStream memStream = new MemoryStream(); JpegBitmapEncoder encoder = new JpegBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(imageC)); encoder.Save(memStream); return memStream.GetBuffer(); }
为了测试方便,可以使用一张现有图片,转换为byte[],然后由LoadImage方法转换后显示。
- 已标记为答案 Leo (Apple) YangModerator 2014年7月14日 1:33
-
可以通过把现有图片通过getJPGFromImageControl方法转换为byte[],存储下来。
然后使用这个byte[] 数据,通过LoadImage 方法再转换为BitmapImage。
- 已标记为答案 Leo (Apple) YangModerator 2014年7月14日 1:33