• 类内部函数级别的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。查找出相邻的颜色相同的字符放到一对标签内。
  • 相关阅读:
    如何利用c++读取.doc文档
    C++经典面试题(验证你的C++水准)
    与你初识
    VS2005发布项目
    请教一:OpenGL旋转
    数据备份和故障修复文件历史记录
    数据备份和故障修复备份与还原
    使用Windows 8 的“任务计划”令HydraVision更加精彩
    Windows 恢复环境(Windows RE模式)
    Unsupported major.minor version 49.0错误处理
  • 原文地址:https://www.cnblogs.com/sky266/p/940521.html
Copyright © 2020-2023  润新知