在 ASP.NET 中,控制显示二进制图像

分享于 

4分钟阅读

Web开发

  繁體

介绍

RbmBinaryImage 控件将帮助你直接从数据库中显示图像。 你可以将 Image 字段直接绑定到 ImageContent 属性。 此外,还可以指定是否要将显示作为缩略图,并提供缩略图大小。

使用RbmBinaryImage控件

首先,需要添加引用 RbmControls.dll,然后将代码放在 web.config的system.web 部分中的。

<httpHandlers><addverb="GET"path="__RbmImageHandler.rbm"type="RbmControls.RbmImageHandler"/></httpHandlers>

然后,在要使用该控件的页中,使用以下命令将它的register:

<%@RegisterAssembly="RbmControls"Namespace="RbmControls"TagPrefix="Rbm"%>

你可以使用 ImageContent 属性直接绑定控件。 此外,还可以指定是否将图像显示为缩略图,并指定当 ImageContent 为空时要显示的图像。 另一种方法是通过代码执行该操作:

RbmBinaryImage1.ImageContent = FileUpload1.FileBytes;

使用代码

RbmBinaryImage 类继承 System.Web.UI.WebControls.Image,并添加存储和呈现二进制图像的功能。 它还增加了根据指定大小生成缩略图的能力,还可以缓存图像。

ImageContent 属性检索并存储视图视图中的图像字节。 此外,如果将 DisplayThumbnail 属性设置为 true 然后,它将检索图像的缩略图:

public byte[] ImageContent
{
 get {
 byte[] imageBytes = ViewState["ImageContent"] as byte[];
 if (!DisplayThumbnail)
 return (imageBytes == null)? null : imageBytes;
 elseif (imageBytes!= null)
 {
 byte[] bytes = CreateThumb();
 return bytes;
 }
 elsereturnnull;
 }
 set {
 ViewState["ImageContent"] = value;
 }
}

使用 OnPreRender 方法根据图像控件的属性设置来设置 ImageUrl:

protectedoverridevoid OnPreRender(EventArgs e)
{
 base.OnPreRender(e);
 if (DesignMode)
 return;
 if (ImageContent!= null)
 {
 if(string.IsNullOrEmpty(CacheKey))
 CacheKey = "Rbm" + System.DateTime.Now.Ticks;
 ImageUrl = String.Format("~/__RbmImageHandler.rbm?MimeType={0}" + 
 "&EnableCaching={1}&ImageContent={2}",
 MimeType, EnableCachinge? "1" : "0", CacheKey);
 if(this.Context.Cache[CacheKey] == null)
 this.Context.Cache[CacheKey] = ImageContent;
 }
 elseif (ImageUrl == "" || ImageUrl == null)
 {
 ImageUrl = EmptyImageUrl;
 }
}

RbmImageHandler 类实现 IHttpHandler 接口并重写 ProcessRequest 方法以显示图像:

publicvoid ProcessRequest(HttpContext context)
{
 #region Caching Propertiesstring cacheKey = context.Request["ImageContent"];
 if (String.IsNullOrEmpty(cacheKey))
 return;
 bool enableCaching = false;
 if (!String.IsNullOrEmpty(context.Request["EnableCaching"]))
 Boolean.TryParse(context.Request["EnableCaching"], out enableCaching);
 #endregion 
 #region Image Propertiesstring mimeType = context.Request["MimeType"];
 if (string.IsNullOrEmpty(mimeType))
 mimeType = "image/jpeg";
 byte []imageData = context.Cache[cacheKey] as byte[];
 #endregionif (!enableCaching)
 context.Cache.Remove(cacheKey);
 context.Response.ContentType = mimeType;
 context.Response.OutputStream.Write(imageData, 0, imageData.Length);
}

分享你的想法

如果你喜欢该控件或者对它有任何意见,或者你想要添加到它的特性,请在这里分享你的想法。


控制  图像  asp  asp-net  BIN  images  
相关文章