如何导出WinForm 控件界面的矢量图

     调用Control.DrawToBitmap(Bitmap) 方法是很容易得到控件的图形的。 但是bitmap是栅格化图形。栅格化图形有很多缺点,比如文件体积比较大、 放大后失真、 不易编辑等等。 这里教你如何导出一个控件的矢量图。

 

I.  Windows MetaFile.
     windows MetaFile 是windows 下面的一种矢量图形格式。 事实上WMF 只是记录下来的一串GDI 命令,重新调用一次这一串GDI命令就可以重建之前记录下来的图像。而大部分windows应用程序的界面都是用GDI绘制的,所以理论上都可以导出他们界面的矢量图。 详细去看:http://en.wikipedia.org/wiki/Windows_Metafile

 

II. 绘图表面 ( drawing surfaces )
     用GDI+绘图的时候,基本上你会把图形绘制到 屏幕上的窗体、传到打印机的打印文档、内存里的图像文件等等。 这些叫做绘图表面。


首先我们来创建一个新的EMF文件:

Code

 

调用WinApi把控件打印到此Graphics 对象上面(这个Graphics对象会作为参数传递给下面一级一级的子控件的OnPaint()函数):

Code

 

 到这里已经得到了这个控件的矢量图了。下面附加一段代码把这个EMF复制到剪切板上面去:

Code

 

 

运行这段代码以后, 就可以吧控件的矢量图粘贴到图像编辑软件上面了(CorelDraw, Word, Excel等)。 可以无限放大不失真, 还能够编辑里面的文本哦!

 

posted @ 2009-02-25 16:06  Yang Ching  阅读(3426)  评论(12编辑  收藏