Delphi – 我如何“就地”裁剪位图?

前端之家收集整理的这篇文章主要介绍了Delphi – 我如何“就地”裁剪位图?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我有一个TBitmap并且我想从这个位图获得一个裁剪图像,我可以“就地”执行裁剪操作吗?例如如果我有一个800×600的位图,我怎么能减少(裁剪)它,使其包含600×400图像在中心,即得到的TBitmap是600×400,并包含由(100,100)和(700)限定的矩形,500)在原始图像?

我是否需要通过另一个位图或者可以在原始位图内完成此操作?

解决方法

您可以使用 BitBlt功能

试试这段代码.

procedure CropBitmap(InBitmap,OutBitMap : TBitmap; X,Y,W,H :Integer);
begin
  OutBitMap.PixelFormat := InBitmap.PixelFormat;
  OutBitMap.Width  := W;
  OutBitMap.Height := H;
  BitBlt(OutBitMap.Canvas.Handle,H,InBitmap.Canvas.Handle,X,SRCCOPY);
end;

你可以用这种方式

Var
  Bmp : TBitmap;
begin
  Bmp:=TBitmap.Create;
  try
    CropBitmap(Image1.Picture.Bitmap,Bmp,10,150,150);
    //do something with the cropped image
    //Bmp.SaveToFile('Foo.bmp');
  finally
   Bmp.Free;
  end;
end;

如果要使用相同的位图,请尝试使用此版本的函数

procedure CropBitmap(InBitmap : TBitmap; X,H :Integer);
begin
  BitBlt(InBitmap.Canvas.Handle,SRCCOPY);
  InBitmap.Width :=W;
  InBitmap.Height:=H;
end;

并以这种方式使用

Var
 Bmp : TBitmap;
begin
    Bmp:=Image1.Picture.Bitmap;
    CropBitmap(Bmp,150);
    //do somehting with the Bmp
    Image1.Picture.Assign(Bmp);
end;

猜你在找的Delphi相关文章