加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 03:50:04 所属栏目:大数据 来源:网络整理
导读:如果我有一个TBitmap并且我想从这个位图获得一个裁剪图像,我可以“就地”执行裁剪操作吗?例如如果我有一个800×600的位图,我怎么能减少(裁剪)它,使其包含600×400图像在中心,即得到的TBitmap是600×400,并包含由(100,100)和(700)限定的矩形,500)在原始图像
如果我有一个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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读