r如何改变Canvas的ClipRect?(200分)

  • 主题发起人 主题发起人 小总水
  • 开始时间 开始时间

小总水

Unregistered / Unconfirmed
GUEST, unregistred user!
在用TImage作图时,动态改变了width和height,但其
Canvas的Cliprect不变,如何解决?
 
在Delphi的help里好象是说,如果width and height超过了canvas的
话,cliprect 是不生效的。
自已再好好see help吧.
 
image.width := newwidth;
image.height := newheight;
// add following lines:
image.picture.bitmap.width := newwidth;
image.picture.bitmap.height := newheight;
 
cliprect 是与作图的 bitmap 相关的.应该是小于等于bitmap的大小.
是你图形的重画可见部分大小.
 
TIMAGE的AUTOSIZE设为TRUE。
你应该自己重画变化的图象
 
Image1.Picture.Bitmap.Width := Image1.Width;
Image1.Picture.Bitmap.Height := Image1.Height;
 
区域是屏幕上用于控制画布绘图区的部分。
TCanvas类有个ClipRect属性,是只读属性。为了改变剪取区域,
要使用Windows API。将上例稍作修改,看看剪取区域如何工作。 代
码如下:
Graphics::TBitmap* bitmap=new Graphics::TBitmap;
bitmap->LoadFromFile("handshak.bmp");
HRGN hRgn=CreateRectRgn(50,50,250,250);
SelectClipRgn(Canvas>Handle,hRgn);
Canvas>Draw(0,0,bitmap);delete bitmap;

 
请继续讨论或结束问题
 
这样也可以吧
image.picture.bitmap.width := newwidth;
image.picture.bitmap.height := newheight;
image.width := newwidth;
image.height := newheight;


 
TCanvas类有ClipRect属性,是只读属性。
为了改变剪取区域,需要使用Windows API。

eg:

procedure ....
var
myRgn :HRgn;
.
.
.
begin
.
.
.

myRgn :=CreateRectRgn(100,100,200,200);
SelectClipRgn(Image1.Canvas.Handle,myRgn);

Canvas.Draw(...);
.
.
.
SelectClipRgn(Image1.Canvas.Handle,0);
DeleteObject(myRgn);
end;

 
先改变image内图象的大小再改变image的大小,这样对image的大小的改变才起作用
bmp.width:=100;
bmp.height:=100;
image1.width:=bmp.width;
image1.height:=bmp.height;
如果
image1.width:=bmp.width;
image1.height:=bmp.height;
bmp.width:=100;
bmp.height:=100;
就不起作用了。
 
Another_eYes的方法很好。我试过了。捡了个便宜。省了不少银子。嘻嘻!
 
$@#!%&$@%!!
不能给自己加分
 
接受答案了.
 
后退
顶部