C# 从流中加载图像

C# 从流中加载图像,c#,uwp,C#,Uwp,有没有办法将流转换成图像 我试过位图,但它说我没有系统。绘图。。。所以我试了一下: var bitMap = new BitmapImage(); bitMap.SetSourceAsync(stream); image.Source = bitMap; 编辑: 我正在尝试使用VS 2015构建UWP app+ 2-它只是说明名称空间中不存在System.Drawing 编辑2: 好吧,我可能解释错了。这个想法是:我有一个图像,我想把它的来源换成不同的东西,然后重新加载,这样我就可以看到图像了

有没有办法将流转换成图像

我试过位图,但它说我没有系统。绘图。。。所以我试了一下:

var bitMap = new BitmapImage();
bitMap.SetSourceAsync(stream);
image.Source = bitMap;
编辑: 我正在尝试使用VS 2015构建UWP app+

2-它只是说明名称空间中不存在System.Drawing

编辑2:

好吧,我可能解释错了。这个想法是:我有一个图像,我想把它的来源换成不同的东西,然后重新加载,这样我就可以看到图像了。 图像实际上是一个“流”,所以我假设我需要将其转换为位图,然后以某种方式加载

编辑3:

好的,我认为描述和使用上面的代码会更容易:

有一个图片框,我正在使用:

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

现在我想把这张抓拍的照片显示为一张图片。(图像“框”是在开始时创建的,因此要改变源代码)

我不确定这是否是您要查找的内容,但如果您希望将流与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);
 }
使用(InMemoryRandomAccessStream=new InMemoryRandomAccessStream())
{
DataWriter writer=新的DataWriter(stream.GetOutputStreamAt(0))
writer.WriteBytes();
等待writer.StoreAsync();
var image=新的位图图像();
wait image.SetSourceAsync(流);
}

这就是你需要的吗?

是的,所以我设法解决了它:

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

我发现产生的错误是:“找不到组件”,所以我用这个技巧解决了它。

这是wpf还是类似的东西?你说的“我没有
System.Drawing
”到底是什么意思?Image Image Image=System.Drawing.Image.FromStream(stream)的可能副本@丹妮拉。汤普森更新了问题。对了,你必须把它存储为字节[]吗?你不能直接使用这个流吗?其次,问题是图像没有加载新的源,有没有办法“重新加载”它?我把它作为byte[]数组,因为这是我对象的属性之一。它是这样从web服务检索的。关于第二个问题-不加载新源代码是什么意思?好的,如果你看一下我的代码。我正在做和你完全一样的事情。。。无意中我忘了加上“等待”,但那是“撤消”的错误。。。然而,我的想法是,在最后,我在一个单独的“图像”框中显示了“var图像”,这似乎是不可能的。我不确定我是否理解正确。但是一旦你得到你的流,你应该为图像设置它-这应该会显示它。事实上,我想我知道是什么导致了它:我得到了这个(我以前没有看到):在mscorlib.ni.dll中发生了类型为'System.exception'的异常,但在用户代码中没有处理它,当我启动“wait image.setourceasync(stream);”你是一位绅士和学者。它到处寻找解释,但其他所有人都在从位置0开始的文件加载到流中。还有其他一些代码说stream.position=0,但这是只在UWP中编写的。我无法让这种方法对我起作用,但它很有魅力: