3
var originalImageBytes = originalFile.FileBytes();
// Convert bytes to image
Image originalImage;
using (var ms = new MemoryStream(originalImageBytes))
{
originalImage = Image.FromStream(ms);
}
// Convert back to byte array
using (var ms = new MemoryStream())
{
originalImage.Save(ms, ImageFormat.Png);
return ms.ToArray();
}
在任何点返回originalImageBytes
工作得很好,然而该程序无限期地悬挂在最终return ms.ToArray()
线。图片为byte []无限期挂起
为什么ms.ToArray()
会造成挂起?
谢谢,你说得对。如果我将第一个块更改为'Bitmap originalImage;使用(var ms = new MemoryStream(originalImageBytes)) originalImage = new Bitmap(Image.FromStream(ms)); '它工作正常。 –
对于阅读此内容的其他人,请勿执行上述代码!我认为.net垃圾回收器会与它混淆,即使从Image对象创建Bitmap对象,您也会得到奇怪的行为。保持原始图像内存流为整个方法打开是唯一正常工作的。 –
这是因为图像严重依赖于Windows的句柄。关闭内存流会清除它引用的内存块。 –