在 WebForm 中显示多个动态图像






2.43/5 (7投票s)
2005年4月7日
3分钟阅读

74176
一篇关于在网页中使用动态图像的文章。
引言
本文将为您提供在单个 .aspx 页面中显示多个动态生成图像的基本指南。我们知道,使用单独的 WebForm 来生成动态图像并在创建图像时使用该页面的 URL 是一种标准做法。这是一种将此方法扩展到使用同一 WebForm 作为 URL 在同一页面中显示多个动态图像的简单方法。
背景
一个小回顾。要在 Web 表单中显示单个动态图像,我们将其放入一个会话变量中,例如 "ImageBinary
"(我通常将图像的字节数组插入会话中,而不是位图)。然后,我们创建一个单独的 .aspx 页面(例如,ImageViewer.aspx)。在其页面加载方法中,我们将之前初始化的会话的内容写入响应的输出流(我使用 Response.BinaryWrite (byte[])
)。然后,我们可以在任何我们想要的地方创建图像,并将该图像的 URL 设置为我们在上一步中创建的页面的 URL。我们可以在 ImageViewer.aspx 中创建任何图像并将其写入输出流,而无需使用会话变量。
但是,这种方法有一个主要的缺点。您无法使用同一页面作为 URL 来显示单独的图像。当一个图像被更新时,所有具有该 URL("ImageViewer.aspx")的图像都会被更新。我将在下一节中解释如何纠正这个问题。(您可以在网上找到许多文章,提供我在这里概述的方法的详细描述。请参考它们以获取更多信息。)
使用代码
为了解释如何在单个 WebForm 中显示多个动态图像,让我们举一个例子。我们将图像作为 byte[]
s 存储在 SQL 数据库中。我们希望获取一组匹配特定条件的记录,并在单个页面中显示所有结果。我们希望显示存储在数据库中的图像以及其他详细信息。假设我们已经完成了获取记录并创建用于显示这些记录的表格的任务(该表格将通过将行添加到设置为服务器控件的表格中动态创建)。
首先,我们将从数据库中获取的 byte[]
s(代表图像)插入到 ArrayList
中。
//For each record in the recordset
int index=0; //you will see the use of this variable later on
{
ArrayList laryImgArray = new ArrayList();
.
.
laryImgArray.Add(laryPic); //larypic is the byte[] from the database
index++;
}
然后,我们创建一个图像,其 URL 设置为我们即将创建的页面(例如:MultipleImaging.aspx)。
string lstrImgString = "<img src=\"MultipleImaging.aspx?Index =
"+index+"\" width=\"50\""+
"height=\"50\" hspace=\"5\" vspace=\"5\">";
lcelPic.Controls.Add(new LiteralControl(lstrImgString));
lcelPic.Align = "center";
您可以使用任何方法来创建图像并将路径设置为相应的页面。只需确保在 URL 的末尾添加参数 "Index
" ("MultipleImaging.aspx?Index = "+ index
)。
然后,我们将一个 byte[]
s 数组插入到一个新的会话(例如,"ImageBinaryArray
")
Session["ImageBinaryArray"]=(byte[][])laryImgArray.ToArray(typeof(byte[]));
然后,我们创建一个名为 "MultipleImaging.aspx" 的新 WebForm。在此页面的 Page_Load
方法中,我们编写一些类似于下面给出的代码
private void Page_Load(object sender, EventArgs e)
{
if((Session["ImageBinaryArray"]!=null) &&
Session["ImageBinaryArray"].GetType().Equals(typeof(byte[][])))
{
byte[][] laryImages = (byte[][])Session["ImageBinaryArray"];
int index = Int32.Parse(Request.Params.Get(0).ToString());
if(laryImages[index].Length > 0)
Response.BinaryWrite(laryImages[index]);
else
{
//send a default image
}
}
}
就这样!您可能无法立即应用这些代码,但稍作修改,我想您应该能够将其变成有用的东西。
关注点
此方法可用于在网页中显示图像,而无需将它们存储在临时位置。这将为许多人节省大量时间,而无需考虑多个请求和有效管理临时空间。