金 金少 Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-15 #1 怎样取一副方形图的中心为园心, 以自定义r为半径, 画园! 要求保持园内图像, 将园外的图像改为白色? 有没有好的方法? 多多指教! Tks !
M maming Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-15 #2 这用不着什么算法吧!直接计算就是了。 你动手试试,很快就可以搞定,估计你是一直在想如何如何更简单点。
H Huzzz Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-15 #3 内建一个位图,底色为白色,然后画一个中心为园心r为半径的黑色的园,然后对 这两幅图进行按位或操作,相当于一个蒙板。这样速度较快,但需要额外的资源。
J jsxjd Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-15 #6 我用两个 TImage 实现了,以下是代码,马上给出详细说明。 procedure TForm1.Button1Click(Sender: TObject); var arect:TRect; begin ARect := Rect(0, 0, m1.Width, m2.Height); m1.Canvas.brush.color:=$ff0000; m1.Canvas.FillRect(ARect); m2.Canvas.brush.color:=$ffffff; m2.Canvas.FillRect(ARect); m2.Canvas.brush.style:=bsclear; m2.Canvas.brush.color:=$000000; m2.Canvas.Ellipse(ARect); with m1.Canvas do begin CopyMode := cmSrcPaint ; CopyRect(ARect, m2.Canvas, ARect); CopyMode := cmSrcCopy; { restore the copy mode } end; end;
我用两个 TImage 实现了,以下是代码,马上给出详细说明。 procedure TForm1.Button1Click(Sender: TObject); var arect:TRect; begin ARect := Rect(0, 0, m1.Width, m2.Height); m1.Canvas.brush.color:=$ff0000; m1.Canvas.FillRect(ARect); m2.Canvas.brush.color:=$ffffff; m2.Canvas.FillRect(ARect); m2.Canvas.brush.style:=bsclear; m2.Canvas.brush.color:=$000000; m2.Canvas.Ellipse(ARect); with m1.Canvas do begin CopyMode := cmSrcPaint ; CopyRect(ARect, m2.Canvas, ARect); CopyMode := cmSrcCopy; { restore the copy mode } end; end;
A amakusa Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-15 #7 //帮你做了一个过程 procedure EllipseArea(Dest,Src:TBitmap;X,Y,R:Integer); begin Dest.Assign(Src); Src.Canvas.Pen.Color:=clWhite; Src.Canvas.Ellipse(X-R,Y-R,X+R,Y+R); //以下的copy图像模式最为关键 Bitblt(Dest.Canvas.Handle,0,0,Dest.Width,Dest.Height,Src.Canvas.Handle,0,0,MERGEPAINT); end; dest 为目标图像 src 为源图像 x,y 为圆心坐标 r为半径
//帮你做了一个过程 procedure EllipseArea(Dest,Src:TBitmap;X,Y,R:Integer); begin Dest.Assign(Src); Src.Canvas.Pen.Color:=clWhite; Src.Canvas.Ellipse(X-R,Y-R,X+R,Y+R); //以下的copy图像模式最为关键 Bitblt(Dest.Canvas.Handle,0,0,Dest.Width,Dest.Height,Src.Canvas.Handle,0,0,MERGEPAINT); end; dest 为目标图像 src 为源图像 x,y 为圆心坐标 r为半径
J jsxjd Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-15 #8 m1,m2 是两个一样大的TImage。 m1中可以放置你的图像,我这里只是用蓝色填充。 m2在运行时可隐藏(visible:=false)。只是为了在里面画一个 Mask。 关键在于 Mask怎么画,以及如何叠加。 在 m2 中先用 白色填充($FFFFFF),然后用黑色($000000)画所需要的圆。 然后将 m1 和 m2 中的图像施行 ( OR 操作),这在使用 CopyRect时,由 CopyMode := cmSrcCopy 体现。 和白色 OR 变成白色,和黑色 OR 保持不变。 要找出中心点画任意圆应该不成问题。
m1,m2 是两个一样大的TImage。 m1中可以放置你的图像,我这里只是用蓝色填充。 m2在运行时可隐藏(visible:=false)。只是为了在里面画一个 Mask。 关键在于 Mask怎么画,以及如何叠加。 在 m2 中先用 白色填充($FFFFFF),然后用黑色($000000)画所需要的圆。 然后将 m1 和 m2 中的图像施行 ( OR 操作),这在使用 CopyRect时,由 CopyMode := cmSrcCopy 体现。 和白色 OR 变成白色,和黑色 OR 保持不变。 要找出中心点画任意圆应该不成问题。
X xujincheng69 Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-20 #11 我没有代码,给你一个方法吧, 先建立一个圆形区域,再建立一个矩形区域,再用区域合并,得到新区域。 用draw画出图像。 有空的话我做一源程序给你。