zoukankan      html  css  js  c++  java
  • Image控件显示以byte[]字节数组形式存在的图片

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

    示例代码在此!

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

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

    1 Response.BinaryWrite(imgBytes);

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

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

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

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

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

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

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

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

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

    特别注意:

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

    1 <system.webServer>
    2   <handlers>
    3     <add name ="virtualImageHandler" verb="*" path="ImageVirtualSource.aspx" type="ImageBytesShowSample.ImageVirtualSourceHandler"/>
    4   </handlers>
    5 </system.webServer>
  • 相关阅读:
    Sql Server Report 导出到EXCEL 指定行高
    SQLSqlserver中如何将一列数据,不重复的拼接成一个字符串
    SQL Server Management Studio无法记住密码
    nuget.org无法解析的办法
    js获取select标签选中的值及文本
    Word 如何实现表格快速一分为二
    sql server rdl report 如何用动态sql
    浏览器窗口刷新
    SWFUpload 在ie9上出现的bug
    历数PC发展史上的祖先们
  • 原文地址:https://www.cnblogs.com/isun/p/4321898.html
Copyright © 2011-2022 走看看