从流加载图像

时间:2016-06-24 14:28:39

标签: c# uwp

有没有办法将Stream转换为Image?

我尝试了Bitmap,但它声明我没有System.Drawing ...所以我尝试了这个:

var bitMap = new BitmapImage();
bitMap.SetSourceAsync(stream);
image.Source = bitMap;

编辑: 我正在尝试使用VS 2015构建UWP app +。

2 - 它只是声明命名空间中不存在System.Drawing。

EDIT2:

好的,我可能已经解释错了。我的想法是:我有一个Image,我想将其源代码更改为不同的东西然后重新加载,这样我就可以看到图像了。 该图像实际上是一个“流”,所以我假设我需要将其转换为Bitmap,然后以某种方式加载。

EDIT3:

好的,所以我认为描述然后使用上面的代码会更容易:

我正在使用一个图片框:

var stream = new InMemoryRandomAccessStream();
await mediaCapture.CapturePhotoToStreamAsync(ImageEncodingProperties.CreateJpeg(), stream);

现在我希望这张捕获的照片显示为图像。 (图像“框”在开始时创建,因此想法是更改源)。

2 个答案:

答案 0 :(得分:2)

我不确定这是否是您正在寻找的,但如果您想使用BitMapImage的流,您应该使用:

var image = new BitmapImage();
await image.SetSourceAsync(stream);

例如,当您将照片存储为byte []数组时,可以使用该流将其转换为图像:

using (InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream())
 {
     DataWriter writer = new DataWriter(stream.GetOutputStreamAt(0)) 
     writer.WriteBytes(<<here your byte[] array>>);
     await writer.StoreAsync();

     var image = new BitmapImage();
     await image.SetSourceAsync(stream);
 }

这就是你需要的吗?

答案 1 :(得分:1)

是的,所以我设法解决了这个问题:

var bitMap = new BitmapImage();
stream.seek(0);                          // LINE ADDED
bitMap.SetSourceAsync(stream);
image.Source = bitMap;

我发现正在生成的错误是:“找不到组件。”所以我设法通过使用这个技巧来修复它。