如何从SQL Server检索图像的宽度和高度属性?

时间:2010-11-07 10:03:11

标签: c# asp.net image-processing

我正在从SQL Server检索图像,以便使用此方法在我的ASP.NET 4.0应用程序的新页面上显示(我的一篇帖子):

How to display an image based on SelectedValue in a GridView?

然后我使用这种方法在新窗口中显示图像:(我的一篇帖子):

How to display an image in a new window

我要做的是获取图像的高度和宽度,以便创建与存储图像具有相同高度和宽度的新窗口。我想有两种方法可以做到这一点:

  1. 在数据库中创建高度和宽度列,并在将图像插入数据库时​​存储值
  2. 从数据库中检索图像,并在显示之前以某种方式计算高度和宽度,然后将浏览器窗口调整到合适的大小。
  3. 我已经在数据库中拥有超过150个图像,这使得选项1变得困难,因为我必须返回我的数据库并计算已经在数据库中的图像的高度和宽度。因此,我更愿意使用选项2,或者可能还有其他选择?我该怎么做呢?

    感谢您的光临。

2 个答案:

答案 0 :(得分:6)

类似的东西:

System.Drawing.Image image = System.Drawing.Image.FromStream( 
    new System.IO.MemoryStream((byte[]) SqlReader["img_data"]) 
);

int width = image.Width;
int height = image.Height;

答案 1 :(得分:1)

从长远来看,编写一个小程序来从数据库中获取所有图像将比在需要显示图像的页面的每个请求上解析图像数据更高效 。请记住,页面本身通常不需要加载图像数据,只需包含对它的引用。此外,即使是对实际图像的请求通常也只是从数据库中获取blob并将其返回给客户端,而不会产生任何可能代价高昂的内部加载。

编写一些代码以将每个图像依次作为字节数组获取需要大约20分钟,使用Bitmap(Stream)构造函数加载它(使用MemoryStream包装字节数组),然后询问其维度的位图,然后将其写入数据库。

这20分钟的工作将使您无需每次要显示页面时为每个要在页面上显示的图像加载图像数据。你仍然需要编写代码来加载来自数据的图像 - 但它会更频繁地发生,并且在你真的不想要的时候发生。