zoukankan      html  css  js  c++  java
  • GDI+学习笔记

    GDI+不支持异或绘图,而使用双缓存方式,避免了图形闪烁,但是速度稍慢,占用内存较多。随着硬件发展,这是一个图形编辑器的趋势;

    用 GDI+ 开发矢量图形编辑系统的经验之谈
    性能篇
    “经过无数次的实验,终于形成了自己的代码风格”:声明两个Bitmap对象,一个用于即时的图形绘制,另一个用于存放已有的图形。在用鼠标绘图的过程中,直接把Bitmap复制到绘图窗口所对应的Graphics上,以提升绘图的速度;
    避免用三角函数、平方根、除法;
    避免大量使用Structure;
    不同的图元有不同的图像拾取算法,一般常用的矢量计算方法可以保证较高的算法效率;

    项目的对象建模
    要考虑几个方面:确定图元、图元参数的保存和处理、坐标系、图像时拾取。
    操作图元参数时,直接把像素值保存在图元参数中比较方便。因为Single类型的“数据还原性”很差,而图形经过旋转、缩放、坐标系变换后,必须用double类型处理,所以可以考虑把所有图元参数全部用double类型处理,损失一些性能但换来了易用性。

    http://www.cnblogs.com/bluntsword/archive/2005/08/10/211363.html也提到了GDI+采用float类型带来的精度问题。另外此文提出要解决精度的问题,需要避免使用坐标变换。整个绘制过程中保持
    “世界坐标系”和设备坐标系统一,然后自己记录实际坐标与设备坐标的缩放和偏移,然后在绘制时将实际坐标转换为设备坐标。

    “自己进行坐标转换也不难,简单的仿射变换”

    READ:《GDI+的雷区 》
    http://blog.csdn.net/Nightmare/archive/2005/04/22/359092.aspx

    GDI+变换之后的坐标被限制在以下范围
    x -4194304.0f
    y -4194304.0f
    width 8388608.0f
    height 8388608.0f
    如果超出范围,图形画不出,

    INST:了解GDI+ 2.0所作的改进
    INST:了解“放射变换”作坐标变换

    ---------------------------------------------

    目前的需求是要在Windows窗体上呈现一些图形元件,类似MS Visio,可以从工具箱中拖动图形元件到画板上。现在有两种备选方式:
    方式一:绘制闭合的线条,然后填充;
    方式二:准备好图片,然后绘制图片。
    使用方式一,连接线条的各个点的位置需要使用绘图工具辅助确定,然后以渐变色填充。问题是如果要添加新的图形元件,必须要修改程序,除非引入反射和配置机制,实现运行时载入扩充的绘制新图形元件的类型;
    使用方式二,好处是扩充的成本要低一些,但是为了要高亮选中的图形元件,需要另外准备一套图片,作实时替换,而替换需要多个操作,如重新绑定业务对象、重新填充文字。

    因为项目规模较小、需要的图形元件只有确定的数量,所以考虑方式一实现。

  • 相关阅读:
    如何成为一名高级C++程序员
    JAVA设计模式:装饰模式
    JAVA设计模式:代理模式
    HTML学习笔记四
    HTML学习三
    HTML学习二
    HTML学习一
    JAVA集合一之集合简介(Collection,List,Set)
    20150817---成长日记1---DelayQueue&&Delayed&&Other
    shell-早间学习,每日一点-5
  • 原文地址:https://www.cnblogs.com/yicone/p/1226164.html
Copyright © 2011-2022 走看看