注册 登录
编程论坛 VB6论坛

汉字勾边,恳请指教算法!

lowxiong 发布于 2012-02-18 11:30, 768 次点击
  最近,碰巧逛进vbgood论坛,发现自己早在05年就注册了。认真看了些帖子,感觉这里高水平的不少,尤其有些人对图像的编程,真是让我景仰之情,犹如滔滔江水,绵延不绝啊!图像领域我一直想涉足的,何不趁这个劲头好好向高手们学学!
  从哪里入手呢?当然从实际应用出发,我是从事电视工作的,前段时间,紧急新增一栏目,需要提词器,硬件是我从旧的电视提词器改装,可软件没有,我只好从网上下载一个自己破解了用到现在(见我空间文章:https://hi.bccn.net/space-249791-do-blog-id-34579.html),一直想等有空了自己写个提词器软件替换这个。
  这次正好就从这开始。首先从汉字图形勾边实验起,可是一开始就碰到非常棘手的麻烦:就是vb处理图形时的速度,速度啊!看了很多提高速度的手段,可以使用dib直接处理图形数据,可以使用模拟指针处理内存,这些都是针对整块图形的,并不针对算法的。
  我的勾边算法有两个,一个可称为直线勾边算法:它的思路是一个像素点周围八个方向上只要是背景色即改为勾边色,当勾边数多时拐弯处都是直角。另一个可成为圆润勾边算法:它的思路是以一个像素点为圆心,以勾边数为半径获取逐点的圆的坐标,再从像素点坐标到圆点的坐标画直线,这样的勾边在拐角处很圆润自然,PS勾边的效果就是这样。两种算法我都实验成功了,扣除用getpixsel和setpixsel函数用时的200至250毫秒(可以使用DIB和指针提高),直线算法勾20边需要大约350毫秒,而圆润勾边算法需要5765毫秒,即5秒多了。
  这是不能忍受的,要知道PS处理勾边基本上是实时的,几乎没有延时。是不是我的算法有问题还是vb本来就慢呢?现奉上源码,恳请有经验的高手赐教!
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录


[ 本帖最后由 lowxiong 于 2012-2-18 11:33 编辑 ]
5 回复
#2
mayuebo2012-02-18 18:43
这个不叫勾边.叫字符轮廓.是和字体有关.相关算法请参照
http://wenku.baidu.com/view/469ae4fb941ea76e58fa0463.html
#3
lowxiong2012-02-18 19:18
回复 2楼 mayuebo
谢了,那篇文章看了,主要是讨论通过建立汉字笔画索引库来检索的,对我勾边(轮廓)算法的作用不大。另外如果你做过电视字幕的话,你所说的轮廓我们一般都称为勾边,如红字勾黑边,勾几个边等等,我们一直是这样说的。

[ 本帖最后由 lowxiong 于 2012-2-18 19:20 编辑 ]
#4
mayuebo2012-02-19 14:52
噢.可能你没有注意看.上面那篇文章是按汉字笔顺来把字显示出来的,可以空心的.参考一下GDI教程
#5
lowxiong2012-02-19 15:40
回复 4楼 mayuebo
truetype字体空心字有交叉(笔画重叠),不是真正的轮廓字。其实这种勾边方法还包括不规则图形。
今天通过改进算法,又提升了点速度。勾20个边从近6秒提高到3秒。非常感谢你,我已经知道可以通过gdi函数读取字体了,以后肯定有用。
#6
mayuebo2012-02-19 17:38
不错.这个用处很大
1