0

我正在做一个项目,我从数据库中加载 12 个长 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;
    }
4

2 回答 2

2

扩展我的评论:

您可以使用 .ashx 处理程序在几行代码中将图像从字节写入 HTML,但由于您使用的是 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" />
于 2013-02-04T17:47:37.643 回答
1

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

另外,为什么首先创建 byteArray 变量?您已经将 blob 数据作为输入变量 imagebytes 中的字节 []。删除 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
    }
}
于 2013-02-04T16:30:56.700 回答