有关 textout() 的问题 ( 不要只看不顶啊 ) (300分)

  • 主题发起人 主题发起人 chshanghai
  • 开始时间 开始时间
C

chshanghai

Unregistered / Unconfirmed
GUEST, unregistred user!
画线 可以设置 pen.mode =pmxor 来设置 线的 模式 这样就可以不用覆盖屏幕上原来的图形
但 textout 没有办法. 有什么办法让 textout 也有pen.mode=pmxor 这样的效果
 
用DrawText
 

Brush.Style:= bsClear;
再textout。
 
远帆说的对,我试过的。
 
brush.style =bsclear 只能不覆盖背景 , 但 文子本身还是覆盖的


比如
我想实现 像 pen.mode=pmxor 然后画线 A:
pen.mode.=pmcopy
moveto (0,0)
lineto(200,200)
线条 B
pen.mode:=pmxor
moveto(0,200)
lineto(200,0)
这时 二条线 在(100,100) 这个点相交, 这个交点在屏幕上就是背景色

文字C
textout( 10,10,'文字');
我希望文字c也能像 线条B 那样的效果 即 与 线条A 相交的地方也是背景色

该怎么设置?????








 
你的要求用Textout不能实现!
要这样:
TextOut到一bmp上,再copy bmp到canvas上,设置CopyMode;

还有其他方法,不过你先试试行不行。
 
copy 的方法应该是可以, 但是 , 这样对我的程序来说不是什么好办法
我是在图形移动是要用这种方法

不过还是谢谢你提醒了我.
大家还要什么方法.
 
业余的做法如下(区别于专业作图,专业作图一般会建立自己的画法):
利用一个动态创建的 HDC 或者简单一点就直接使用动态创建位图。
在这个 DC 上把背景填充为白色,并写上黑色文字,接着,在这个 DC 上继续处理您上面
说的线条,不过,这时使用的是白色来画线。这样,这个 DC 就被白线划过出现白线痕迹
了(指相交部分)。好了,利用 Windows.TransparentBlt 函数,把白色标记为透明。这
个函数不传送透明色。于是留在您需要出现文字和线条的表面,就是您希望的效果(您那
个表面上的画线仍然按照您自己上面的方法处理,实际上是画了 2 个表面)。
假如您希望更专业一些,正好这里有些内容供您参考(仅仅是参考):
http://www.01cn.net/cgi-bin/topic_show.cgi?id=1064
http://www.01cn.net/cgi-bin/topic_show.cgi?id=1029
 
哦。不对,需要在 2 个表面同时做 2 个相反的处理。
 
to :小雨哥
你误解我的意思了 , 你说的要实现的方法 没有必要这么麻烦.
我是想 实现以下操作.
我一个canvas上画图形. 这这个图形可以移动 放大,....
就像autocad 那样. 移动时, 我的方法是

设置 canvas.pen.mode=pmxor
draw;
设置新位置
draw

对于线条 可以 上面的方法完全可以. 也不会覆盖canvas 其他图像.

但是应为我的图像上有标注(文字) 这时 设置pen.mode=pmmode 就不行了
只能用:
clear
设置新位置
draw 的方法. 但这种方法有个弱点 可能会产生 canvas 上的其他图像被 clear 了
(但从另外一个图像上移动时)
所有我希望 文字也能像 线条那样 我看了看 autocad 他可文字就可以移动 而姐 文字就好像是线条一样的效果.







 
定好left,top然後直接使用label.把label設成透明...設Transparent為true
 
to kouchun

应为某些原因, 你的方法 不在考虑之列. 不过还是谢谢你
 
用GDI API的BeginPath和EndPath取得字符轮路径,
用StrokePath画到DC上,其绘制过程使用Pen的属性。
 
to apw
我试试
 
to apw,
用了 StrokePath 后 因为是轮廓线 字体比较粗, 用什么办法让他的字的线条变小
改变font.size 是不行的
 
1)考虑可否利用一个临时的canvas
2)考虑记录所有的操作,用临时canvas显示结果,这样余地大一些
 
哎呀,就是异或啊,在使用 Canvas 的情况下不使用直接处理有点困难。

使用 Canvas 只能做到透明的层级别的移动,就是您说到的利用一个临时的 Canvas 来保留
被移动的画面上的线条和文字,把它当做一个层,代表一个部分线条文字的组合。

我的另一个帖子:http://www.01cn.net/cgi-bin/topic_show.cgi?id=1083 (一个小人走
路的动画的例子)也只能做到层的透明覆盖,要再使用目标异或,按我目前能够处理的做法
,只有使用汇编处理了,我暂时没有代码可以供您参考。sorry 。
 
to kerbcurb , 小雨哥
使用另一个图层 有严重的问题, 就是在透明的图层上 画图形速度特别满, 尤其在 PIII 以上的机器上特别明显, 所以我在考虑用一个图层
 
chshanghai:
因为的直接用TextOut输出不能达到你的效果,采取其他方法
可以将bmp半透明贴到canvas上(不是用Canvas.copyRect),你的文字写到bmp上就可以实现,速度还可以。
 
to xuxiaohan

这样我就要产生很多的 bmp , 应为我有很多的 文字. 谢谢
 
后退
顶部