
2008年6月11日
摘要: 为了让这篇文章说的东西能够落实,无法躲避的基本东西还是要先准备一下的。今天花了6个小时查了无数资料终于把文字的边框弄出来了。
在此贴出代码和效果图,不作过多解释。熟悉Win32API中的GDI部分的朋友们可以很容易看懂。
效果图:
提取的轮廓:红色和黑色为直线,蓝色为四次贝塞尔曲线。其中上面是先TextOut后自己画,下面是先自己画后TextOut。四次贝塞尔曲线转换成三次贝塞尔曲线之后使用PolyBezier绘制。
代码:
代码使用的框架是我自己寒假无聊的时候封装API的结果,暂时有窗口、菜单、组合键以及菜单,附带GDI。事件自己弄了一个跟C#差不多的可以同时Bind很多不同种类函数的东西。不过这个不是重点。需要重点阅读的是如何使用GetGlyphOutline。
dtof将double转换成FIXED,ftod相反。
GetPoint进行点的变换,主要是因为画字符的时候需要偏移。
DrawCurve绘制边框。
阅读全文
posted @
2008-06-11 23:48 陈梓瀚(vczh) 阅读(1474) |
评论 (7) |
编辑 收藏
摘要: 接着上一篇文章继续往下讲。如果按照上一篇文章走下去的话,现在估计做了有些小软件了吧。字符串和图形都容易做大,而且对于潜意识上喜欢数学的最有希望的程序员们也是有吸引力的。但是这两种东西却不容易做好。等到程序到了一定规模的时候,维护和效率这两大问题就会凸显出来。心急吃不了热豆腐,为了解决维护和效率这两个经常会出现的问题,我们需要学习算法和架构。这两种东西是可以同时学的,但是一篇文章说不了多少东西,那么就从算法开始吧。
程序员是需要开阔眼界的,光C#一门也是不行的,毕竟程序运行在各种平台上,有各种各样的语言。譬如Win32上的native C/C++、Delphi等,.NET上的C#和VB.NET,还有自成体系的Java,然后就是运行在mainframe上的COBOL,剩下的还有各种各样的函数式语言、脚本语言等等。熟悉了C#的人从Delphi入手不会很困难,从C/C++入手也可以了。这两门原本是本地语言的语言在编写程序的时候需要我们注意多一些的东西,典型的就是内存管理。这还是需要多加练习的,在这里就不多说了。
说到算法,在这里首先向
阅读全文
posted @
2008-06-11 16:03 陈梓瀚(vczh) 阅读(3527) |
评论 (7) |
编辑 收藏
摘要: 前天在博客上说希望开发一个尽量独立于GDI的图形库。这个图形库将不使用其他图形库例如GDI+、OpenGL以及DirectX等。图形库使用GDI的原因如下:
1:字体的边框比较难获得。直接读TTF文件暂时还不想做,因此想借助GDI的API获取文字的Bezier轮廓。
2:不使用GDI无法把图片刷上窗口。
因此这个图形库使用的GDI的功能也仅限于此。当然,开发出来的结果必然是GDI所不能达到的。GDI+的结构也稍微有一点点不理想。
为什么GDI和GDI+的速度都不太理想呢?下面的分析将会给出一个可能的解释。
今天早上考了软件配置管理,也就是让我们了解一下为什么需要Subversion这样的软件来帮助我们开发软件。考完试回来的路上就构思了这个图形库的结构。让我们考虑一下图形库所需的功能,也就是需求分析了。我们用惯的图形库都有绘制图形、文字以及图像的功能。图形有画刷和边框,其中边框是具有形状的。
首先考虑一下文字。我们知道现在绝大多数的文字都是由Bezier边
阅读全文
posted @
2008-06-11 11:13 陈梓瀚(vczh) 阅读(1546) |
评论 (13) |
编辑 收藏