在Web页内显示Binary(位图)的组件(二)

原创 2004年08月18日 15:58:00

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

一、            写在前面:

由于工作比较紧张!代码写多了头脑就会发热,所以程序员一定要注意休息,不要太多的熬夜,俗语说得好:“什么都可以有就是不可以有病!”;

昨晚体验了一下vs2005,真是不一样的感觉,不能不佩服M$的眼光和想象力。深远的影响到每一个程序员。无论是从界面体验、功能体贴、人性化、代码的简洁等哪方面考虑,他带给我们的是效率的提升,和把事情的简单化。简单就是最好的。

我们不需要再加班的梦想也许不会太远了

让我们一起来吧!

 

二、            原理:

好了!有时候我们总是喜欢说废话。但是有时候废话却很可以调节心情,那么就继续把:

asp.net显示位图的唯一方法(因为目前我只知道这么一个方法^_^)就是将ImagUrl的连接设到一个页面上,然后在那个叶面将位图Respone到叶面上就行了!不过就是麻烦点而已。就是这样:

src="region.binaryimage/fccc37ab-f4cb-4199-8332-7ff0168daad4.aspx"。

那么要把这样一种过程集成到组建里面去,就可以不用再为建一个目标叶面而浪费时间了,以方便又省事(因为我比较懒,所以我比较喜欢写一些组件以便满足我的惰性)。

经过周密的研究后(^_^)得出一个解决方案:

组件自动产生一个相关目录,在该目录中再建个配置文件,以便把响应重定位到我们自定义类型处理。

 

三、            组件技术:

那么为了实现这个伟大的组件(^_^),我们需要一些组件方面的技术。

1、也是最重要的一点就是叶面重定位技术,在配置文件节点

<?xml version="1.0" encoding="GB2312" ?>

<configuration>

    <system.web>

        <httpHandlers>

              <add verb="*" path="*" type="Region.Controls.BinaryImageHandler, region.binaryimage"/>

       </httpHandlers>

    </system.web>

</configuration>

重定位到我们自定义类型。

2、如何实现自定义类型。在.net framework 中提供一个接口来达到这个效果,我们的自定义类型Region.Controls.BinaryImageHandler必须继承自System.Web.IhttpHandler实现他的两个接口。(由于篇幅的关系,更深入的原理就不在这里细说了,感兴趣的话可以查看MSDN)

3、还有一点就是位图的如何从源页传到目标页的呢?由于我们没有目标页,所有处理都在我们的自定义类型当中处理,而HttpHandler已发的时候Session等对象都还没有实力化,唯一可行的方法就是位图保存在Application里面。用完之后删掉就可以了。

4、那么还有几个地方要注意,就是将位图保存在Application中的ID,因为是全局的。所以可以取个GUID来稿定。

基本上就可以这么高定了!

源码发到下面,新建个类库项目将下面代码Copy然后编译就可以了!:(因为不前我还没有空间提供下载,如果哪位好心朋友提供我可上传上去供大家方便下载)

#region[     BinaryImage Show Coponent]

///Author:Region

///MSN:hl_net@msn.com

///Blog:http://Blog.csdn.net/xinyulou

#endregion

 

using System;

using System.IO;

using System.Web;

using System.Resources;

using System.Reflection;

 

 

namespace Region.Controls

{

    /// <summary>

    /// 显示位图 

    /// </summary>

    /// <code>

    /// <%@ Register TagPrefix="Region" Namespace="Region.Controls" Assembly="Region.Controls" %>

    /// <Region:BinaryImage id="BinaryImage" runat="server"></Region:BinaryImage>

    /// </code>

    //[System.Web.UI.ToolboxData("<{0}:BinaryImage runat=server></{0}:BinaryImage>")]

    public class BinaryImage:System.Web.UI.WebControls.Image

    {  

       string path1 ;

       protected override void OnLoad(EventArgs e)

       {

           base.OnLoad (e);

           path1 = Path.Combine(Page.Request.PhysicalApplicationPath,Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().Location));      

           string path2 = Path.Combine(path1,"Web.config");       

           if (!Directory.Exists(path1))

           {

              Directory.CreateDirectory(path1);

           }

           if(!File.Exists(path2))

           {

//            ResourceManager rm = new ResourceManager(Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().Location)+".String", Assembly.GetExecutingAssembly());

//            string a = rm.GetString("Config");    

              string a = "<?xml version=/"1.0/" encoding=/"utf-8/" ?>"+@"

<configuration>"+@"

    <system.web>"+@"

        <httpHandlers>"+@"

              "+"<add verb=/"*/" path=/"*/" type=/""+this.GetType().Namespace+".BinaryImageHandler, "+Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().Location)+"/"/>"+@"

       </httpHandlers>"+@"

    </system.web>"+@"

</configuration>"+@"

";

              byte[] bs = System.Text.Encoding.Default.GetBytes(a);

              FileStream fileStream = new FileStream(path2,FileMode.Create, FileAccess.Write);

              try

              {

                  fileStream.Write(bs, 0,bs.Length);

              }

              finally

              {

                  if (fileStream != null)

                  {

                     ((IDisposable)fileStream).Dispose();

                  }

              }

           }

          

       }

 

       //唯一ID

       public string GUID

       {

           get

           {

              if( ViewState[UniqueID]== null)

                  ViewState[UniqueID] = Guid.NewGuid().ToString();

              return (string)ViewState[UniqueID];

           }

       }

 

       //[System.ComponentModel.Browsable(false)]

       public byte[]  Binary

       {  

           set{ Page.Session[GUID] = value;}

           get{return Page.Session[GUID]==null?null:(byte[])Page.Session[GUID];}

       }

 

       protected override void Render(System.Web.UI.HtmlTextWriter writer)

       {

           if(ImageUrl == "")

           {

              ImageUrl = Path.Combine(Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().Location), GUID+".aspx");

              if(Page.Application[GUID] == null)

                  Page.Application[GUID] = Binary;  

           }

           base.Render(writer);

       }

   

    }

 

    public class BinaryImageHandler:System.Web.IHttpHandler

    {

       public virtual bool IsReusable

       {

           get{return true;}

       }

       public virtual void ProcessRequest(HttpContext context)

       {

           string id = Path.GetFileNameWithoutExtension(context.Request.FilePath);

           if(context.Application[id] != null)

           {

              byte[] bs = (byte[])context.Application[id];           

              HttpContext.Current.Response.BinaryWrite(bs);

              context.Application[id] = null;

           }

       }

    }

 

 

四、            写在最后:

 

边听着悠扬美妙的音乐、边体验Codes的诗一般的美。

如此而已

 

Share u opinion

如果你有什么想法,欢迎写下来!

二值神经网络(Binary Neural Network,BNN)

在我刚刚过去的研究生毕设中,我在ImageNet数据集上验证了图像特征二值化后仍然具有很强的表达能力,可以在检索中达到较好的效果。而Bengio大神的这篇文章,则不止于将特征二值化,而是要将权重和每层...
  • xinzhangyanxiang
  • xinzhangyanxiang
  • 2016年03月18日 20:00
  • 17921

MFC中位图显示函数

点击打开链接 理解分辨率 我们常说的屏幕分辨率为640×480,刷新频率为70Hz,意思是说每行要扫描640个象素,一共有480行,每秒重复扫描屏幕70次。   理解调色板 有一个长宽各...
  • rayna00
  • rayna00
  • 2016年06月20日 17:21
  • 629

MFC如何显示位图

1. 资源文件中加载 bmp 2.1. 静态加载图片  在属性下设置为如下即可 2.2 动态加载图片 其中要在控件中添加CStatic变量,并且属性设置为如下 ...
  • u011258240
  • u011258240
  • 2015年12月17日 09:51
  • 330

MFC---多种方式显示位图

一、控件方式1、将要显示的位图b.bmp放在res文件夹下 2、右键工程,选择“Insert”,选择Bitmap,这时工程中新添了Bitmap文件夹 3、右键Bitmap文件夹,选择“Import...
  • u012319493
  • u012319493
  • 2016年08月09日 20:08
  • 1588

OpenCV学习:将图像转为二值图像(函数cvtColor和函数threshold)

想换一下CSDN账户的头像,换成自己的真实的头像,但是又不想那么直接,干脆就把头像转换成二值图得了,因为从二值图像是推不出来原图的。这个过程需要OpenCV的两个函数,第一个函数是彩色图像转化为灰度图...
  • u012786955
  • u012786955
  • 2015年07月20日 11:31
  • 3098

局部二值模式LBP(Local Binary Pattern)实现代码

局部二值模式LBP由于其简单、高效在目标检测、目标识别、图像检索等领域得到了广泛的应用。现如今,LBP的变体不下上十种,如VLBP、SILBP等。要了解更多关于LBP的知识可以参考:纹理分类-全局特征...
  • kezunhai
  • kezunhai
  • 2013年08月23日 19:26
  • 2870

LBP(Local Binary Pattern,局部二值模式)

LBP(Local Binary Pattern,局部二值模式)是一种用来描述图像局部纹理特征的算子;它具有旋转不变性和灰度不变性等显著的优点。它是首先由T. Ojala, M.Pietik?ine...
  • u012856866
  • u012856866
  • 2015年04月10日 10:03
  • 1524

(学习笔记5)BMP位图照片的灰度变换之二值化

这次我主要在BMP位图照片的读取和显示的基础上,加上了对BMP位图照片的灰度变换。都是一层层上来的,这次不打算一次性更新完灰度变换,我会一个个来更新,这来更新的节奏会快一点,避免一次内容太多,撰写时间...
  • caicai_zju
  • caicai_zju
  • 2016年04月13日 16:16
  • 2236

二值网络(Binarized Neural Networks)学习与理解

二值网络(Binarized Neural Networks)学习与理解
  • linmingan
  • linmingan
  • 2016年03月29日 19:56
  • 5066

主题和母版页 如何在web窗体调用操作母版页内容元素

标准化网站布局        标准化网站布局的格式只是整个过程的一部分,你还需要保证通用的元素,如网站的标题、网站的导航控件等在每个页面里都出现在相同的位置。解决这一问题的关键在于创建一个可以重...
  • bensidiyu
  • bensidiyu
  • 2015年07月14日 15:30
  • 3900
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在Web页内显示Binary(位图)的组件(二)
举报原因:
原因补充:

(最多只允许输入30个字)