有时我需要从字节数组中加载图像,如下所示:
Bitmap image = null;
using (var ms = new MemoryStream(File.ReadAllBytes(sourceImagePath)))
{
image = (Bitmap)Image.FromStream(ms);
}
现在我需要根据该图像创建一个TextureBrush
,所以我使用以下方法:
using (var b = new TextureBrush(image))
{
}
它抛出System.OutOfMemoryException: 'Out of memory.'
。经过一段时间的试验,我发现如果使用Image.FromFile
可以像这样创建画笔:
using (var b = new TextureBrush(Image.FromFile(sourceImagePath)))
{
}
为简便起见,我将不介绍为什么我不想使用此方法的原因,因此谁能在第一个示例中向我展示如何使用字节数组方法?
答案 0 :(得分:3)
删除MemoryStream上的using语句。
1)MemoryStream不会占用任何系统资源,因此无需处理它们。您只需关闭流。
2)使用Image.FromStream时,必须使流保持打开状态。请参阅https://docs.microsoft.com/en-us/dotnet/api/system.drawing.image.fromstream?view=netframework-4.7.2上的备注部分:
备注
您必须在图像的生命周期内保持流打开。
另一种选择是复制位图,如下所示:
using (var ms = new MemoryStream(File.ReadAllBytes(sourceImagePath)))
using (var bmp = (Bitmap)Image.FromStream(ms))
{
image = new Bitmap(bmp);
}