如何对图象进行裁剪?急(100分)

  • 主题发起人 主题发起人 stonesll
  • 开始时间 开始时间
S

stonesll

Unregistered / Unconfirmed
GUEST, unregistred user!
我先在Timage1中选择了一个矩形型框,我希望能将矩形框之外的部分裁剪掉,就象PHOTOSHOP的裁剪一样,不知怎么实现?
 
//先得到要裁剪的区域,再做处理
CopyRect(destRect,sourceCanvas,sourceRect)
 
我先抛块砖

你选保存选定的区域
然后清除image
image.canvas.fullrect()
接着拷贝刚才保存的区域到image


 
var
rgn :HRgn;
bmp :TBitmap;
begin
bmp :=TBitmap.Create;
bmp.Assign(Image1.Picture.Bitmap);
rgn :=CreateRectRgn(40,40,250,150); //创建剪切区域
SelectClipRgn(Image1.Canvas.Handle,rgn);
Image1.Picture :=nil;
BitBlt(Image1.Canvas.Handle,40,40,250,150,bmp.Canvas.Handle,0,0,SRCCOPY);
bmp.Free;
end;
 
现在的问题是我已经知道了需要保留的区域为(rect_ll:trect),而希望对图象进行裁剪,
如果用copyrect,那么请问我怎么获得已经被拷贝到画布中的图象。(image1.Canvas.CopyRect(rect_ds,image1.Canvas,rect_ll);)??
 
先保存画布 :
bmp :=TBitmap.Create;
bmp.Assign(Image1.Picture.Bitmap);
再清空画布 : Image1.Picture :=nil;
然后画上去 : image1.Canvas.CopyRect(rect_ds,bmp.canvas,rect_ll);
 
tyn.好象不行,如果你方便,希望看一下photoshop的裁剪,我就想达到那种效果,
先用鼠标拖出一个虚线的矩形框,然后选择“裁剪”,那么画布就变为矩形大小。不知可不可以实现?
多谢了!
 
不要用什么CopyRect了,试试下面的程序。
procedure TForm1.Button1Click(Sender: TObject);
var
rgn :HRgn;
bmp,bmp0 :TBitmap;
begin
bmp :=TBitmap.Create;
bmp.Assign(Image1.Picture.Bitmap);
Image1.Picture.Assign(nil);
rgn :=CreateRectRgn(40,40,250,150);
SelectClipRgn(bmp.Canvas.Handle,rgn);
bmp0 :=TBitmap.Create;
bmp0.Width :=250-40;
bmp0.Height :=150-40;
BitBlt(bmp0.Canvas.Handle,0,0,210,110,bmp.Canvas.Handle,40,40,SRCCOPY);
Image1.Picture.Bitmap.Assign(bmp0);
bmp.Free;
bmp0.Free;
end;
 
接受答案了.
 
后退
顶部