键盘敲击者cncxz

  博客园 :: 首页 :: 联系 :: 订阅 订阅 :: 管理
  34 Posts :: 0 Stories :: 259 Comments :: 14 Trackbacks

    对于以二进制形式存储在数据库中的图片,以前都是采用在单独的aspx页面Response.BinaryWrite写出、Image控件设置ImageUrl属性调用的方法来显示,无意中看到Astron Digital的BinaryImage控件后发现完全没有必要单独弄个aspx页面,可惜他那个控件是要收费的,于是研究了一下他的代码,写了这么一个实现同样功能的开源控件  :) 

    具体实现细节就不说了,感兴趣的把源码拿去看看就明白了,简要说一下BinaryImage控件的主要属性:

CssClass        定义图片格式的css伪类,自WebControl继承

Width        图片宽度,自WebControl继承

Height        图片高度,自WebControl继承

Binary        图片二进制数据,从数据库中读出来赋值给它即可

FixImageSrc    固定图片地址

FixIsDefault     是否以固定图片为首选项:true优先显示固定图片,false则优先显示二进制图片

ImageAlign    图片对齐方式


    在演示页面中共放置了三个BinaryImage控件:BinaryImage1,BinaryImage2,BinaryImage3,其中BinaryImage1未作任何设置,BinaryImage2设置了FixImageSrc属性,BinaryImage3在Page_Load中设置了Binary属性,最终显示效果如图BinaryImage_demoView所示:

补充:可以把这个控件放到gridview的模板列中用以显示该条记录包含的存储在数据库中的图片数据。

源码和演示工程:http://files.cnblogs.com/cncxz/BinaryImage.rar


posted on 2006-04-13 23:12 cncxz(虫虫) 阅读(4575) 评论(19)  编辑 收藏 网摘 所属分类: C#相关

Feedback

#1楼  2006-04-14 08:25 81      
好,收藏,有用得到的时候,谢谢。
  回复  引用  查看    

#2楼  2006-04-14 09:32 Dflying Chen      
为什么不直接使用ashx文件呢?
  回复  引用  查看    

#3楼 [楼主] 2006-04-14 09:52 cncxz(虫虫)      
ashx和单独aspx页面显示在思路上是一致的,只不过具体实现方式有些差别。以在gridview显示数据库中的图片为例,假设存在10条记录,ashx和单独aspx页面均要对数据库执行11次读的操作(1次列表,10次图片),而采用这个BinaryImage控件,在列表时就已经把图片数据读出了,所以只读了一次数据库。不过具体到实际应用中就看各人的习惯了 ~ :)
  回复  引用  查看    

#4楼  2006-04-14 11:34 高海东      

  回复  引用  查看    

#5楼  2006-04-14 11:59 cmoremore [未注册用户]
这种存储方式图片在数据库占的空间和他本身的大小是一样吗?
  回复  引用    

#6楼 [楼主] 2006-04-14 12:08 cncxz(虫虫)      
TO cmoremore:将图片数据存储在数据库中与直接保存所占空间应该是一样的,存储在数据库中在数据备份时操作更为简便,而且不用考虑图片存储路径
  回复  引用  查看    

#7楼  2006-04-14 17:26 THIN      
原来是用/demo/default.aspx?BinaryImage=BinaryImage2这样的路径多次请求页面,把Response.Content清空掉,再写出Binary数据
  回复  引用  查看    

#8楼  2006-04-14 17:31 THIN      
这样做也有缺点,就是每张图片会请求一次页面,造成一次页面解析
System.Drawing.Image image1 = System.Drawing.Image.FromStream(new MemoryStream(byteImg));
这一句不知干嘛的

  回复  引用  查看    

#9楼 [楼主] 2006-04-14 18:53 cncxz(虫虫)      
To THIN :这个是用来判断图片格式以设置Response.ContentType的,后来发现没有必要,就删掉了,可惜代码没删干净,不好意思啊,把这句直接删掉就可以了
  回复  引用  查看    

#10楼  2006-04-15 15:21 韦恩卑鄙      
我也认为这样会使浏览器的图片缓存失效 绝对不建议这么做
  回复  引用  查看    

#11楼  2006-04-15 15:24 韦恩卑鄙      
另外图片存在数据库也是不被建议的 一方管理更新不直观 一方面给数据服务器造成了额外的负担:流输出这种事情明明是文件服务器的任务 却让数据库服务器陪着做了一次陪练。。。。
  回复  引用  查看    

#12楼  2006-04-18 17:03 guest [未注册用户]
呵呵,可以调整一下做验证码图片的显示 :)
  回复  引用    

#13楼  2006-06-24 11:35 tgq [未注册用户]
没能解决页内刷新问题吗?如在页内重赋值图像二进制,不能更改哟?
  回复  引用    

#14楼 [楼主] 2006-06-26 10:52 cncxz(虫虫)      
目前是采用的控件ClientID作标识,所以不能重新赋值,用生成Guid的方式作标识就可以解决了,可以把生成的Guid存放到隐藏域中,该值不变则图片没有更新,再设置一个强行重设标识的方法,重赋值图像二进制时调用即可。过几天我抽空调整一下代码
  回复  引用  查看    

#15楼  2007-03-14 17:52 feixue [未注册用户]
图片一多就等着爆库吧
  回复  引用    

#16楼  2007-04-09 13:26 yunhuasheng      
放到数据库里感觉问题也是挺多的。图片少的话还可以。
  回复  引用  查看    

#17楼  2007-08-02 14:16 Yama [未注册用户]
请问可以在VS2003中使用吗
你这个是2005下编写的吧,如果要在2003下使用,该做怎样的改动

  回复  引用    

#18楼  2008-01-14 11:38 hnyntx [未注册用户]
用这个控件怎么显示不了数据库二进制图片,我的图片是用扫描仪扫进去的,不晓的这样可以不,我试了很多方法都没有效果,请指教。
  回复  引用    

#19楼  2008-07-03 02:53 defly [未注册用户]
在gridview好像无法使用
  回复  引用    


发表评论



姓名 [登录] [注册] 
主页
Email (仅博主可见) 
验证码 *  验证码看不清,换一张
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论   新用户注册   返回页首      

导航: 网站首页 社区 新闻 博问 闪存 网摘 招聘 .NET频道 知识库 找找看 Google站内搜索



China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
China-Pub 计算机绝版图书按需印刷服务

相关文章:

相关链接: