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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |