工作中遇到了这样的一个问题。起初觉得很简单,获得了图片的byte[]后,可以将其转换成内存中的图片对象(如System.Drawing.Image),而后赋给页面的Image控件。尝试后才发现这样根本做不到。搜索网络,整理出两种实现的方法。

示例代码在此!

一、引入一新页面.aspx,Image控件URL指向该页面

该页面ImageSource.aspx只完成一件事:将代表图片的byte[]写入http输出流。

 Response.BinaryWrite(imgBytes);

该页面的执行效果即只显示图片本身。

使Image控件的ImageUrl属性指向该页面。

 imgPicture.ImageUrl = string.Concat("ImageSource.aspx?name=", "Lighthouse");

功能实现。该种方式比较简单,但是弊端就是引入了一个貌似多余的页面ImageSource.aspx。为避免这一点,便有了第二种方法。

二、引入HttpHandler,专门处理图片加载的请求

Image控件依然通过ImageUrl属性指向一页面url,但该页面并不真实存在。该请求交由Handler处理。

 <httpHandlers>
<add verb="*" path="ImageVirtualSource.aspx" type="ImageBytesShowSample.ImageVirtualSourceHandler"/>
</httpHandlers>

ImageVirtualSourceHandler中完成的工作基本与先前ImageSource.aspx中无异,主要就是将图片byte[]输出到http流。

 public void ProcessRequest(HttpContext context)
{
var imgName = context.Request.QueryString["name"];
var lightImg = Image.FromFile(string.Concat("E:\\CSPro\\ImageBytesShowSample\\ImageBytesShowSample\\", imgName, ".jpg")); Byte[] imgBytes = ImageToBytes(lightImg); context.Response.BinaryWrite(imgBytes);
}

特别注意:

若使用集成环境运行(VS调试运行),<system.web>下<httpHandlers>配置不被识别。请改为在IIS经典模式下运行或者将configuration移到<system.webServer>下。

 <system.webServer>
<handlers>
<add name ="virtualImageHandler" verb="*" path="ImageVirtualSource.aspx" type="ImageBytesShowSample.ImageVirtualSourceHandler"/>
</handlers>
</system.webServer>

最新文章

  1. JAVA中常说的三大框架指:SSH
  2. Extjs tree 更改图标
  3. MQTT V3.1----publish解读
  4. IOS 使用SDWebImage实现仿新浪微博照片浏览器
  5. iOS 和Android中的基本日期处理
  6. Delphi Memory-Mapped File简单示例
  7. CSS美化 input type=file 兼容各个浏览器(转)
  8. 浅谈二维RMQ
  9. java下socket传文件
  10. zoj3713 7Bit
  11. WebActivator的实现原理详解
  12. javascript面向对象编程笔记
  13. 用DirectShow实现视频采集-流程构建
  14. 黄聪:如何正确在Vue框架里使用Swiper
  15. 用 VSCode 编写 python
  16. jQuery入门(1)
  17. this computer meets the requirements for HAXM,but intel Virtualization Technology (VT-x) is not turned on
  18. skynet对Windows环境支持的版本:Windows版skynet
  19. sort命令的k选项大讨论【转】
  20. express + mongodb 搭建一个简易网站 (五)

热门文章

  1. 『C++』Temp_2018_12_26
  2. c++11线程创建的三种方法
  3. lock free
  4. 字符串和日期的相互转换,在oracle和mysql的用法
  5. Linux下Git远程仓库的使用详解
  6. 使用bareos备份
  7. Hibernate 事务不回滚
  8. Cab 安装不成功问题
  9. For-each Loop,Index++ Loop , Iterator 那个效率更高
  10. mac安装ruby-oci8