图形截剪(50分)

  • 主题发起人 主题发起人 newguy
  • 开始时间 开始时间
N

newguy

Unregistered / Unconfirmed
GUEST, unregistred user!
有没有图形截剪的源程序!
 
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;
 
谢谢你.我试一下看!
 
>>卷兄:有没有剪切圆形功能的方法,如何能在某一指定圆形区域内显示Image的一部份?
 
楼上的朋友:

至于非矩形的剪切,一般还是运用 BitBlt 来实现的;
不过你需要首先创建区域,然后 SelectClipRgn 就OK 。

小小例子:

procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenPictureDialog1.Execute then
Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
Bmp :TBitmap;
FRgn :HRGN;
begin
Bmp :=TBitmap.Create;
Bmp.PixelFormat :=Image1.Picture.Bitmap.PixelFormat;
Bmp.Width :=100;
Bmp.Height :=100;
BitBlt(Bmp.Canvas.Handle,0,0,Bmp.Width,Bmp.Height,Image1.Canvas.Handle,80,80,SRCCOPY); //要拷贝的位图
FRgn :=CreateEllipticRgn(0,0,100,100);
SelectClipRgn(Image1.Canvas.Handle,FRgn);
Image1.Canvas.Draw(0,0,Bmp);
Bmp.Free;
DeleteObject(FRgn);
end;

 
多谢卷兄!!

>>To: newguy,你该给卷兄分了!
 
卷兄,兄弟我是穷人见谅。
Z兄,你娃比人家还急,

另外,还有没有关于亮度 饱和度 色彩的(变亮 暗 。。。)

 
后退
顶部