posts - 4,comments - 23,trackbacks - 1
       使用GDI+接口绘制图形比使用GDI要简单得多,且更容易实现用户的需求。GDI+提供了很多实用的特性,如线条平滑、图形平移、旋转、缩放等。

      1. 使用GDI+绘制直线

1)创建画笔
Pen pen(Color(255, 0, 0, 0), 2.0f) ;

2)创建图形对象

CDC *pDC = GetDC() ;

Graphics graphics(pDC->m_hDC)

3)绘制直线

graphics.DrawLine(&pen, 0, 0, 100, 100);

4)释放DC

ReleaseDC(pDC) ;

2. 参数设置

           1)设置画笔参数

                Pen pen(Color(255, 0, 0, 0), 2.0f)

                pen.SetStartCap(LineCapRound) ;         //修改起始线头类型,这里是圆头

                pen.SetEndCap(LineCapRound) ;          //修改结束线头类型,这里是箭头

                pen.SetDashStyle(DashStyleDot) ;        //修改线条格式,这里是点线

            2)设置图形对象属性

                graphics. SetSmoothingMode(SmoothingModeAntiAlias); //抗锯齿

            3) 绘制直线

                graphics.DrawLine(&pen, 10, 10, 110, 110);

                       通过上面两个步骤可以看出,使用GDI+绘图非常简单,并且通过简单的参数
                设置,可以很方便地绘制出用户需要的图形。
posted @ 2006-04-20 18:56 深圳左岸 阅读(2202) 评论(2) 编辑
  今天接受了一个新的任务,部门的头让我开发一个几何图形草图识系统,大概功能是实现将手画的几何图形草图(如直线、矩形、圆形等等)识别成为标准的矢量几何图形。而直到今天,我对手写识别的基本知识全部加起来也就是大概知道识别应该遵循如下流程:

                           

        至于这个流程的每一个步骤应该怎样操作,呵呵,还在学习。希望各位同行朋友多多指教,有好的经验或好的介绍,请多指导,或者有兴趣进行技术合作也可以(不会白干,呵呵)!
posted @ 2006-03-24 16:54 深圳左岸 阅读(2429) 评论(15) 编辑

       GDI+在原来GDI的基础上进行了许多的升级和优化,比如线条平滑、颜色透明度、图形变换(平移、缩放、旋转),更多图片格式支持等技术都进行了很大的改善,使用GDI+可以很方便的实现对各种图形的绘制和优化。GDI+属于.NET组合,不过VC6.0的朋友也可以很方面地使用它,在VC6.0和工程中使用GDI+的流程如下:
      1.安装GDI+组件。对于没用安装.NET开发平台的朋友,不能直接开发GDI+程序,需要先
          安装该组件。
         (1)可以简单地到其它地方拷贝Gdiplus的相关文件到编程目录下(主要包括gdiplus.h,
              gdiplus.lib, gdiplus.dll等);
         (2)直接从微软的网站下载MICROSOFT PLATFORM SDK 进行安装
             (http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm);比较大。
            安装完成后还要在VC6.0开始环境中添加文件关联路径:
            选择菜单"Tools"-->"Options",选择"Directories"标签页面,分别在Include files及Library
            files中添加文件关联路径,如下:
           
                                                   图1   关联头文件路径
           
                                                      图2   关联lib库文件

      2.创建一个SDI项目GdiplusTest。
      3.加载和注销GDI+资源。在GdiplusTestView.h中定义GDI+资源初始化句柄:
                   ULONG_PTR   m_nGdiplusToken;
         在GdiplusTestView.cpp实现GDI+资源的加载和注销:              
     
              #include "gdiplus.h"
              using namespace Gdiplus;

             CGdiplusTestView::CGdiplusTestView()
             {
                    //初始化GDI+接口
                    GdiplusStarupInput gdiplusStartupInput;
                    GdiplusStartup(&m_nGdiplusToken, &gdiplusStartupInput,NULL);
             }

             CGdiplusTestView::~CGdiplusTestView()
             {
                   //注销GDI+资源
                   GdiplusShutdown(m_nGdiplusToken);
             }

      4.编译之前,选择把Gdiplus.lib联编到项目中,或者使用宏:
              #pragma comment(lib, "gdiplus.lib")

     5.编译项目,GDI+调用成功,不过什么功能也没有,下次再说说怎么使用GDI+画图。

posted @ 2006-03-14 14:06 深圳左岸 阅读(3450) 评论(2) 编辑
  这段时间用GDI+开发一个适量图形绘制软件,类似于CoreDraw,用于教学之用。刚开始用GDI+提供的变换矩阵Matrix实现图形旋转变换,图形的平移和缩放则自己通过计算实现。后来使用发现通过计算修改了坐标值,图形进行多次缩放之后会变形,特别是缩到特小之后无法还原。所以想改用Matrix一起实现图形平称及缩放,原以为很简单,因为都有现成的接口,没想到实现起来还费了不少劲。
  改用Matrix后,先对图形进行缩放后再旋转,一切正常,效果很好。可是先对图形进行旋转后再缩放,问题来了,图形在绘图页面上漂移。这就奇怪了,先后操作有什么不同吗?绘制的时候我可是严格按照先平移,再缩放,最后旋转的顺序完成的啊?
  调试发现,先缩放再旋转图形旋转中心点不会改变(以左上角坐标作为缩放基点,以图形中心点做为旋转基点),但是旋转后再缩放,图形的旋转中心点在不停地改变,所以整个图形应用矩阵变换后位置就产生偏移。如下图:
                               
                                                图1    缩放旋转不同顺序区别

  怎么办?想来想去,只能在缩放时把图形重新偏移回去,以使图形的中心点可以固定在某个位置。
       图形位置调整算法如下:
  

        图形绘制时设置如下变换矩阵:
 
posted @ 2006-03-09 23:17 深圳左岸 阅读(4804) 评论(4) 编辑