如何在使用Image后处理流(stream)?

5
我有一个图片流,通过以下代码将其转换为图片:
Image imagefromstream = Image.FromStream(stream);

当我在图形���绘制这幅图片时,它会绘制出来。

但是,如果我在图形绘制后处理流,那么图片就不会被绘制出来。

有没有人能帮我处理这个图片流呢?


请展示更多绘制图像的代码并处理流。 - John Willemse
2
如果这确实涉及WPF,那么你根本不应该使用System.Drawing.Image,因为它是WinForms的。相反,应该使用System.Windows.Media.Imaging.BitmapImage,就像Sankarann所给出的答案中所示。 - Clemens
2个回答

9
根据MSDN 这里的说明: 您必须在图像的生命周期内保持流处于打开状态。 当关闭应用程序(或者不再需要图像时)必须Dispose流。

如果MemoryStream只在方法块内部,那该怎么处理?在应用程序关闭期间或之后如何释放它? - Pamingkas Sevada
@PamingkasSevada 使用一个包装器 IDisposable(或手动处理的 ValueTuple)来同时包含 ImageStream 对象,并将该对象传递以管理图像的生命周期。 - Dai

3
在这种情况下,您拥有内存流的直接引用,如果您将其处理掉,图像也将被处理掉。
因此,您可以从流中获取源并在BitmapImage中拥有它,将该BitmapImage设置为图像的源。
var imageSource = new BitmapImage();
imageSource.BeginInit();
imageSource.StreamSource = memoryStream;
imageSource.CacheOption= CacheOption.OnLoad;
imageSource.EndInit();

// Assign the Source property of your image
image.Source = imageSource;

2
这也适用于其他流,不仅限于MemoryStream。在EndInit之后,您可以安全地关闭流。 - Clemens
我正在使用.NET 4.8,但似乎不存在image.Source。 - Gyum Fox
1
BitmapImage是指向System.Windows.Media.Imaging.BitmapImage的引用吗?如果是,那它并不真正属于System.Drawing - Dai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接