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>
时间: 2024-10-12 15:18:45

Image控件显示以byte[]字节数组形式存在的图片的相关文章

C#中使用FileUpload上传图片到SQL数据库中以image类型存储并使用Image控件显示注意事项

当我们需要以数据流存储图片到数据库中(而不是文件路径),需要考虑很多因素,不同的环境决定了采取不同方法. 1.将图片存入数据库.首先,当我们决定使用FileUpload上传图片,需要考虑,FileUpload的功能主要是在客户端选取图片,然后使用FileUpload的SaveAs方法将选取的图片的地址保存到服务器端保存,因为我们使用的数据流存储图片,所以没有必要将图片保存到服务器端. 其次,FileUpload没有像OpenDialog的.Filter方法过滤图片的格式,即实现打开对话框,只能选

Wpf的Image控件显示MemoryStream提供的流图像时抛异常处理方法

当WPF的Image控件显示数据库调出的字节数组图像时,会出异常.一般是用了using()或者关闭流就会不显示图像. Source.Metadata”引发了“System.NotSupportedException”类型的异常 byte[] b = File.ReadAllBytes(Directory.GetCurrentDirectory() + "\\test.jpg"); //using (MemoryStream ms = new MemoryStream(b)) //{ /

JGUI源码:实现日期控件显示(17)

本文实现一个日期控件显示,日期控件看起来很复杂,其实原理很简单,为了使程序逻辑看起来简单,切换日期,选择日期等事件处理部分未实现,读者可以自己尝试实现. 1.日期控件分为三个区域:顶部的显示当前日期和选择按钮区域:中间的本月日期显示列表,固定7*6=42个单元格: 底部确定.取消.当前日期选择功能. 2.思路主要是:计算出应该显示的单元格内容,然后替换body区域即可. 代码如下 <style> .jgui-datetimepicker { padding: 10px; } .jgui-dat

cocos2d-x学习笔记(六)TextBMFont控件显示中文乱码或者无法显示

今天用cocos studio加了一个TextBMFont控件,然后需要动态修改TextBMFont控件显示的字符串,用来显示中文的,结果一直无法修改TextBMFont控件的值,最后原来是写到xml文件的中文字符串没有保存成UTF-8格式. ===================================================================================== 记录一下完整实现步骤 一.制作BMFont字体 1.下载并安装BMFont软件 2.

HighChats图表控件显示精度小数点的方法

相信大家对highchats这个图表控件并不陌生,最近在项目中用到它,但是某些字段需要显示为小数点,顾查找资料文档发现下面两个方式可以实现: 初始化时候添加如下两个参数 tooltip:{??? formatter:function(){??? return''+this.point.name+': '+Math.round(this.percentage)+' %';??? }},plotOptions:{?????? pie:{?????? allowPointSelect:true,???

控件显示问题

创建了一个控件,就是看不见: 1.当前控件没有添加到父控件中 2.当前控件的hidden = YES 3.当前控件的alpha <= 0.01 4.没有设置尺寸(frame.size.bounds.size) 5.位置不对(当前控件显示到窗口以外的区域) 6.背景色是clearColor 7.当前控件被其他可见的控件挡住了 8.当前控件是个显示图片的控件(没有设置图片/图片不存在,比如UIImageView) 9.当前控件是个显示文字的控件(没有设置文字/文字颜色跟后面的背景色一样,比如UILa

Atitit.dwr3 不能显示错误详细信息的解决方案,控件显示错误详细信息的解决方案 java .net php

Atitit.dwr3 不能显示错误详细信息的解决方案,控件显示错误详细信息的解决方案 java .net php 1. Keyword/subtitle 1 2. 使用dwr3的异常convert处理不能解除,,,按照盗垒能解除了.... 1 3. 使用js 回回调功能处理...还是不能,子能显示个..javaClassName:"java.lang.Throwable",message:"Error"} 2 4. 异常转换器 2 5. 当然如果想要只针对某一个f

针对 jQuery Gridly 控件显示多少列的问题。

针对 jQuery Gridly 控件显示多少列的问题,完全根据 columns 的值来显示. 但是显示columns,并不是给多少值显示几列.到目前还是很模糊的.官方文档没有给出具体的一个解释. $('.gridly').gridly({ base: 60, // px gutter: 20, // px columns: $("#FormColumnCount").val() * 3, callbacks: { reordered: function ($elements) { /

C# 如何定义让PropertyGrid控件显示[...]按钮,并且点击后以下拉框形式显示自定义控件编辑属性值

关于PropertyGrid控件的详细用法请参考文献: 1.C# PropertyGrid控件应用心得 2.C#自定义PropertyGrid属性 首先定义一个要在下拉框显示的控件: using System; using System.Windows.Forms; namespace Simon.WinForms.Examples.PropertyGrid { public class EditorControl : UserControl { public EditorControl() {