sky266
类内部函数级别的strategy模式
使用代理来模拟多态
今天在写一个把图片处理成HTML文本显示的时候,在两层的循环嵌套内逐个处理像素。
循环内部处理像素的时候有多种选择。(比如处理成彩色的还是处理成黑白的和其他多种算法。)
如果在这里进行判断的话需要上十万次的相同的与非判断。(彩色的都要判断为真,黑白的相反)
虽说影响不是太大,但是本着写程序的时候需要考虑去掉任何可能影响程序性能的非必须操作。
受设计模式的影响,考虑如果实现成类的话最可能选择的就是strategy模式了。
这里一个简单操作。所以考虑使用代理来模拟类的多态。
下面是代码的部分内容
//
定义代理原型 1
delegate
int
GetColorInfoValue(Color color);
//
声明代理 2
GetColorInfoValue gc
=
null
;
//
算法一 生成彩色 3
private
int
GetColorValue(Color color)
{
int
newColor;
newColor
=
((
int
)color.R)
<<
16
;
newColor
+=
((
int
)color.G)
<<
8
;
newColor
+=
(
int
)color.B;
return
newColor;
}
//
算法二 生成黑白 4
private
int
GetGryValue(Color color)
{
int
newColor;
int
c
=
((
int
)color.R
*
30
+
(
int
)color.R
*
59
+
(
int
)color.R
*
11
)
/
100
;
newColor
=
c
<<
16
;
newColor
+=
c
<<
8
;
newColor
+=
c;
return
newColor;
}
//
进行判断绑定不同的算法 5
if
(bColorType)
{ gc
=
new
GetColorInfoValue(GetColorValue); }
else
{ gc
=
new
GetColorInfoValue(GetGryValue); }
//
程序内部的调用 6
for
(
int
i
=
0
; i
<
bmp.Height; i
+=
2
)
{
for
(
int
j
=
0
; j
<
bmp.Width; j
+=
2
)
{
color
=
bmp.GetPixel(j, i);
sb.AppendFormat(
"
<Font Color = \
"
#
{
0
:X6}
\
"
>{1:s}</Font>
"
, gc.Invoke(color),
"
0
"
);
//
进行调用 7
}
sb.AppendLine();
sb.AppendLine(
"
<br/>
"
);
}
深入挖掘一下代理的应用场景,初学的时候以为代理就是跟事件一起用的。(汗!)
题外话
另外需要考虑文本的压缩问题。
1。灰度图片的压缩存在大量的 <font color="#5c5c5c">0</font>
处理办法 生成<font color="#5c">0</font>到客户端使用javascript和正则进行替换。
2。隔行隔列取一个出来
3。生成style 定义相同颜色的字符。
4。查找出相邻的颜色相同的字符放到一对标签内。
posted on 2007-10-28 17:54
暗香浮动
阅读(98)
评论(0)
编辑
收藏
所属分类:
.net
社区
新闻
新用户注册
刷新评论列表
标题
姓名
主页
Email
(只有博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2007-11-10 21:13 编辑过
另存
打印
所属分类的其他文章:
·
is and as
·
编程规范,try catch 和返回值的问题
·
asp.net 2.0的开源项目收集
·
一道面试题目引发的思考
·
类内部函数级别的strategy模式
·
ASP.NET中文件的下载
最新IT新闻:
·
腾讯CEO马化腾:中国互联网业准备再过冬
·
F8 Keynote Speech[多图]
·
奥运核心资源被分食 搜狐央视网谁忽悠谁?
·
微软推新型搜索技术"BrowseRank"挑战谷歌
·
2008年7月26日IT博客精选
博客园新闻频道
博客园首页
社区
导航
博客园
首页
新随笔
联系
订阅
管理
公告
我的最新闪存
精致生活
7-24 15:10
<
2007年10月
>
日
一
二
三
四
五
六
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
统计
随笔 - 15
文章 - 5
评论 - 27
引用 - 0
与我联系
发短消息
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
(2)
给我留言
查看留言
我管理的小组
Visual Studio
我参加的小组
.NET 3.x
jQuery
Ext 2.0
Web技术联盟
图灵有奖书评征集活动小组
ASP.NET
创业交流
读书(Books)
Debug 探索团队小组
设计模式
我参与的团队
.NET 控件与组件开发(4/1344)
北京.NET俱乐部(2/1362)
.NetFramework3.0 & 3.5(WCF,WPF,WF)团队(0/561)
软件项目管理团队(0/194)
CLR基础研究团队(0/359)
Debug 探索团队(0/46)
开源CLI核心探索团队(0/82)
WCF技术研究团队(0/122)
我的标签
SOS
(1)
随笔分类
.net(6)
(rss)
enterprise library
(rss)
javascript/css(1)
(rss)
lucene
(rss)
ms-sql
(rss)
spider(1)
(rss)
wcf
(rss)
随笔档案
2008年7月 (1)
2008年2月 (1)
2007年12月 (2)
2007年11月 (2)
2007年10月 (8)
2007年7月 (3)
2007年6月 (1)
文章分类
lucene.net(1)
(rss)
舎友
小树
搜索
最新评论
1. re: document.body.scrollTop无效的解决方法
还是0
--why?
2. re: document.body.scrollTop无效的解决方法
的确好了,非常感谢
--whx
阅读排行榜
1. 一道面试题目引发的思考(1979)
2. 串口通信,C#,C++,短信发送模块实现(688)
3. (北京.上地科技园区)招聘asp.net(C#)互联网软件开发工程师(含实习生)(502)
4. asp.net 2.0的开源项目收集(421)
5. HTTP Programming Recipes for C# Bots(新书介绍)(143)
评论排行榜
1. 一道面试题目引发的思考(17)
2. asp.net 2.0的开源项目收集(3)
3. 编程规范,try catch 和返回值的问题(2)
4. is and as(2)
5. document.body.scrollTop无效的解决方法(2)