【发布时间】:2018-01-10 12:18:15
【问题描述】:
我已读取图像并将它们以 byte[] 格式保存在数据库中。稍后我想检索图像并将它们转换为图像格式。我写了以下方法:
private List<Image> ConvertByteArraysToImages(List<byte[]> byteDataList)
{
List<Image> retVal = new List<Image>();
int counter = 0;
foreach (byte[] byteData in byteDataList)
{
// Something is wrong here
MemoryStream memstr = new MemoryStream(byteData);
Image img = Image.FromStream(memstr);
retVal.Add(img);
memstr.Dispose();// Just added this
// This works fine, the images appear in the folder
System.IO.File.WriteAllBytes(String.Format(@"C:\dev\test{0}.png", counter), byteData);
counter++;
}
return retVal;
}
我从将图像添加到 ViewBag 以在视图中使用的操作中调用此方法。
public ActionResult ViewTicket(Incident ticket)
{
//Read the ticket via the web API
string serialisedJSON = JsonConvert.SerializeObject(ticket.ID);
string response = TicketUtilities.JSONRequestToAPI(serialisedJSON, "GetSingleIncident");
Incident retVal = JsonConvert.DeserializeObject<Incident>(response);
//Convert byte[] to Image and add to ViewBag
List<Image> ScreenshotImagesFullsize = ConvertByteArraysToImages(retVal.Screenshots);
ViewBag.Add(ScreenshotImagesFullsize); //Error here
return View(retVal);
}
当我尝试将图像添加到 ViewBag 时,我在浏览器中收到以下错误:
Cannot perform runtime binding on a null reference
将字节数组写入文件会产生正确的输出,但我的返回值中没有得到图像列表。在调试模式下将鼠标悬停在 retVal 上会显示以下内容:
我传入了两个字节数组,并在retVal 中看到了两个对象,但我也看到了错误:“无法评估表达式,因为当前方法的代码已优化”。为什么会出现这种情况?
更新:我禁用了 JIT 优化,现在我可以看到以下内容:
我可以看到对象已经正确获取了高度和宽度等属性,但实际数据为空。
【问题讨论】:
-
Dispose()memstr和你在哪里打电话给ConvertByteArraysToImages? -
你的项目的
Optimize code是否被检查? -
检查一下,如果您的解决方案处于发布模式并且项目处于调试状态。另外,您可以尝试从项目中删除优化代码参数。
-
我禁用了优化,上面贴了截图,谢谢
-
那么,您的问题到底是什么?除了不处理那些流(相信我,它们会增加)?您是否尝试过在函数之外使用这些图像?