2.5 HtmlImage控件
HtmlImage控件用来控制<image runat="server">元素,可以使用它在网页上显示一个图像。在日常应用中,一般都去掉runat="server"属性,使它作为HTML标签使用。除非要在服务器端控制它显示的图像时才加runat="server"属性。
2.5.1 HtmlImage控件的使用方法
在对HtmlImage控件的使用中,可以使用它的Src、Width、Height、Border、Alt和Align属性来动态设置和检索图像的源、宽度、高度、边框宽度、替换文本和对齐方式。相关属性的描述如表2-7所示。
它的使用方法很简单,如下面的代码:
<img alt="HTML服务器控件类层次结构演示图"src="Images/1.jpg"
align="middle"border="0"width="300"height="260"/>
这样就可以在页面上创建一个HTML图像标签。当然,也可以把它作为服务器控件在后台进行控制,这时就需要加上ID属性和runat="server"属性,如下面的代码所示:
<img id="testimg"align="middle"border="0"width="300"height="260"runat="server"/>
声明为服务器控件后,就可以在后台用代码来操作它的各个属性,如下面的代码所示:
testimg.Alt="HTML服务器控件类层次结构演示图";
testimg.Src="Images/1.jpg";
2.5.2 使用数据流的形式输出图片
上面已经简单地阐述了HtmlImage控件显示图像的方法,但它有一个限制条件,即所显示的图片必须保存Web应用程序所在的虚拟目录内。
但在实际开发中,有时候需要调用Web应用程序所在的虚拟目录以外的其他磁盘的图片,并且这些图片所在的目录不属于网站虚拟目录;有时候还需要将保存在数据库里的二进制流图片显示出来。面对这些情况,如果采用直接调用图片文件方式来显示图片时不可行,就需要将图片以数据流的形式输出来,然后再显示。来看下面的例子:
在这里,为了使程序能够达到很好的复用效果,我们创建一个ShowImg.aspx文件来专门负责将图片转换成数据流的形式,然后输出。该文件很简单,页面不需要任何代码,后台如代码清单2-7所示。
代码清单2-7 ShowImg.aspx.cs
public partial class ShowImg:System.Web.UI.Page
{
private string file=string.Empty;
protected void Page_Load(object sender, EventArgs e)
{
//获取文件的地址参数
file=Request.QueryString["file"].ToString();
//以数据流的形式根据文件地址打开文件
FileStream stream=new FileStream(file, FileMode.Open);
//获取流的长度
long FileSize=stream.Length;
//定义一个二进制数组
byte[]Buffer=new byte[((it)FileSize];
//从流中读取字节块并将该数组写入缓冲区
stream.Read(Buffer,0,((it)FileSize);
//关闭流
stream.Close();
//输出图片
Response.BinaryWrite(Buffer);
stream=null;
}
}
读者可以参考注释来理解ShowImg.aspx.cs文件里的程序语句。创建好ShowImg.aspx文件之后,就可以直接使用HtmlImage控件来调用该文件进行图片显示了。如:
<img id="img1"runat="server"/>
在后台调用ShowImg.aspx文件进行图片显示:
img1.Src="ShowImg.aspx?file="+Server.UrlEncode("c://1.jpg");