有什么办法能用异或方式在画布上直接输出文字?我试了很久没弄出来(200分)

  • 主题发起人 主题发起人 Huzzz
  • 开始时间 开始时间
H

Huzzz

Unregistered / Unconfirmed
GUEST, unregistred user!
如题。请帮忙。
 
我是专门作了一个注记图层,白色背景(你也可以指定其它颜色,但一定是均一色),
然后用透明方式把这个Bitmap和图形Bitmap进行Bitblt,然后再Draw到前景的Canvas上。
速度很快的,全上海所有街道的名称画出来再帖到前景感觉不到停顿,不用担心。
 
你这方法是好妙,但好像有点别扭,还多用了一个注记BITMAP,对内存也有要求。
其实这方法我以前也想过,但是没有你想的深入透澈,而且有些时候满足不了需求。
还有没有其它直接的办法?比如直接读字库(开玩笑啦)
 
TTF格式是公开的,你可以按矢量图形方式去读,我也曾经想过这种方法,
不过没有实现(因为我想把TTF扩展为我自己的符号库),有好的实现的话我们可以多交流。
 
我觉得直接读字库是得不偿失的,因为别人已经做了这些工作,自己做的话要花大量
时间精力,结果算法不如人家的好,速度性能和稳定性也不如人,还不如用BITMAP。

但你如果只是想把TTF扩展为自己的符号库,只需要把TTF格式搞掂,再存为自己的格
式输出,应该不难。
 
呵呵,你有更好的办法别忘了通知我。
 
看样子没有更好的办法了,我建议微软在WIN2002XP中添加异或方式输出文字的API。
 
异或方式输出文字是什么意思?
 
异或方式就是第一次画出了一个图,第二次再画时可以把它擦掉而不影响背景。
我在作图程序中常用,程序代码简单,不耗内存,速度比较快。
 
首先要GETDC
再要SelectObject
还要SetROP2(这个API可能是这样写,我记不住了)
下面就好了
用完之后要DelectObject
 
zytzjx:
你这方法只对用PEN和BRUSH画出的线、面有效,对文字输出不行,文字输出受FONT影响。
 
需要设置文本的输出方式为透明
如下:
首先获得对象的DC,如BITMAP上的,就getdc; 然后
SetBkMode(hdc,TRANSPARENT);
然后再
TextOut......
 
I write a font application, it can get the font from the font library, then convert
to bitmap, then you can use this bitmap to do anything you want, who want it,
my mail address is yyanghhong@yahoo.com
 
only you:
透明是可以,异或不行。

yyanghhong:
I want it, I'll send you a email.
 
to Huzzz:
其实你在画布输出文字,可以保存为一幅位图,如果想要擦除,只需要以背景色重画
位图区域就OK。
以异或方式是不可能擦除文字的,它只对画线、画图形之类的操作有用,因为异或方式本身
就是针对画笔pen来设计的。而文字涉及到font的设置,不存在异或。
 
卷起千堆雪tyn:
其实我是有点钻牛角尖了,我的需求有好多方法都可以实现,只是我想要一个好的。
事实上我已经保存位图了,这对刷新显示非常必要。
但我还有控件外部的画图代码,要在画布上进行异或画图。

总之这种需求是有的,我们可以探索多种实现方法,看哪种好,也是学习知识。
 
yyanghhong:
I'd recieved the email, thank you.
 
卷起千堆雪tyn:
怎么我在分配积分中找不到你的名字?

Huzzz,对此问题,您可以:

接受答案,并为 only yousavenightyyanghhongzytzjx吕雪松 加上 200 点积分
接受答案,并分配积分

only you
savenight
yyanghhong
zytzjx
吕雪松

请注意分数总和应为 200 分
 
结束问题了,大家不要有意见啊。

卷起千堆雪tyn:
我现在在分配积分中找到你的名字了。

接受答案,并为 only yousavenightyyanghhongzytzjx卷起千堆雪tyn吕雪松 加上 200 点积分
接受答案,并分配积分

only you 5(I ADD IT)
savenight
yyanghhong 60
zytzjx 5
卷起千堆雪tyn 50
吕雪松 80

请注意分数总和应为 200 分
 
后退
顶部