2013-02-04 63 views
0

我正在从一个数据库中加载12个长blob图像并将它们保存在列表中的项目。在mvc3中显示从列表到网页的blob图像对象

在html页面中,我必须显示图像,但在尝试将blob转换为图像时出现错误。使用内存流时出现错误Parameter is not valid。不管我做出什么样的改变,都无法摆脱那个错误。

下面是代码:

public Image getProduct_Image(byte[] imagebytes) 
    { 
     byte[] byteArray = new byte[imagebytes.Length]; 

     MemoryStream ms = new MemoryStream(byteArray); 
     ms.Position = 0; 

     ms.Read((byteArray, 0, byteArray.Length); 
     ms.ToArray(); 
     ms.Seek(0, SeekOrigin.Begin); 
     System.Drawing.Image returnImage = Image.FromStream((Stream) ms); 
      Bitmap bmp = new Bitmap(returnImage); 
      return bmp; 
    } 
+0

是否有你使用'Image'对象的原因?如果你在网络上处理图像,我希望标准的''标签指向一个处理程序(ashx或FileContentResult),它从数据库中检索字节并将它们直接转储到HTTP输出。在你的情况下可能吗? –

+0

哦!坦率地说,我没有尝试过!你有没有关于如何使用它的文章? – user2040259

回答

1

我没有看到你实际用数据填充的ByteArray的任何地方!

此外,为什么你首先创建byteArray变量?在输入变量imagebytes中已经有blob数据作为byte []。删除byteArray并使用imagebytes。

public Image getProduct_Image(byte[] imagebytes) 
{ 
    try 
    { 
     if(imagebytes == null || imagebytes.Length == 0) 
      throw new InvalidDataException("The blob does not contain any data"); 

     MemoryStream ms = new MemoryStream(imagebytes); 
     ms.Position = 0; 
     ms.Read((imagebytes, 0, imagebytes.Length); 
     ms.ToArray(); 
     ms.Seek(0, SeekOrigin.Begin); 

     System.Drawing.Image returnImage = Image.FromStream((Stream) ms); 
     return new Bitmap(returnImage); 
    } 
    catch(Exception ex) 
    { 
     // deal with the exception 
    } 
} 
+0

我尝试了相同的,但我仍然得到错误作为“参数是无效的”在毫秒。 System.Drawing.Image returnImage = Image.FromStream((Stream)ms); – user2040259

+0

嗯。你能提供一些样本数据吗? – Fredrik

+0

是将图像转换为byte []数组的图像还是只是原始的RGB值? – Fredrik

2

扩大对我的评论:

你可以写从字节图像转换成HTML的代码与ashx的处理程序的几行,但因为你是使用MVC,它实际上是很容易的。

首先,您只需设置一个控制器操作 - 假设您的图像可根据整数ID进行识别。只是将这些字节作为内容返回的单行。

public FileContentResult SomeImage(int id) 
{ 
    byte[] bytes = GetImageBytesFromDatabase(id); 
    return File(bytes, "image/jpeg"); 
} 

您的标记是只是一个形象标签与源,因为这控制器动作:

<img src="@Url.Action("SomeImage", "Home", new { id = 123 })" /> 

这实际上创建了以下具体取决于您是否正在做什么特别的东西与你的路由:

<img src="/Home/SomeImage/123" /> 
or possibly 
<img src="/Home/SomeImage?id=123" /> 
+0

伙计们,我的一个朋友弄明白了!那么,这是我的错误。插入不正确!感谢您的帮助。 – user2040259