使用Linq to SQL从数据库中检索图像

6

在我的数据库中,我将图像存储在“image”数据类型中,显示为二进制代码。现在,我想从一个列中检索所有图像,并使用C#在asp.net页面上显示它们。

databaseDataContext db = new databaseDataContext();

    var images = from Picture p in db.Pictures
                 select p.pictureThumb;

然后我使用这个:
    foreach (Picture p in images)
    {
        galleryImages.Controls.Add(p);
    }

但是那样做行不通,因为二进制不能转换成图片。我通过谷歌搜索发现需要先将其转换为字节,然后再转换为图像?但是我找不到如何操作的示例。

1个回答

13
这应该可以做到:
databaseDataContext db = new databaseDataContext();

var images = from p in db.Pictures
             select Image.FromStream(new MemoryStream(p.pictureThumb.ToArray());
foreach (Image image in images)
{
    galleryImages.Controls.Add(image);
}
请注意,Image.FromStream会获取流的所有权——虽然它只是一个MemoryStream,但请确保您处置了图像,出于各种原因。

编辑:啊……我没意识到这是用于ASP.NET的。这使得事情变得更加困难,因为HTML将包含URL,然后您需要能够稍后获取数据。

图片是否有某种ID?如果是这样,请获取该ID而不是实际数据,然后设置一个URL,该URL能够基于ID提供任何缩略图(通过从数据库中获取它并使用适当的内容类型进行服务)。


谢谢,这解决了很多问题。但是我在循环中遇到了一些问题,“最佳重载方法匹配[...]具有一些无效的参数”。galleryImages是一个占位符,但是其他可能性(Literal,Image等)会产生相同的错误。另外,Add(image)告诉我“无法从'System.Drawing.Image'转换为'System.Web.UI.Control'”。我敢打赌,对于.NET我非常没有经验:o - Kablam
1
搞定了 :) 从数据库中检索pictureID,然后使用getImage.aspx.cs提取实际的图像数据。使用ContentType =“image / jpeg”;和BinaryWrite。 谢谢Jon! - Kablam
很酷 - 对于一个声称自己“非常没有经验”的人来说,这真的是一个非常快速的交付 :) - Jon Skeet
我认出了很多我在Google上搜索过的东西,并意识到如何使用它们 :) - Kablam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接