delphi – 围绕位图调整画布大小?
发布时间:2020-12-15 09:29:49 所属栏目:大数据 来源:网络整理
导读:以下图片我将用于以下示例: 未加工的尺寸目前为96 x 71 让我们说我想将画布调整为115 x 80 – 结果图像应该是: 最后,如果我将其调整为比原始画布更小的尺寸,例如45 x 45,输出将如下所示: 这是我到目前为止所尝试的: procedure ResizeBitmapCanvas(Bitmap
以下图片我将用于以下示例:
未加工的尺寸目前为96 x 71 让我们说我想将画布调整为115 x 80 – 结果图像应该是: 最后,如果我将其调整为比原始画布更小的尺寸,例如45 x 45,输出将如下所示: 这是我到目前为止所尝试的: procedure ResizeBitmapCanvas(Bitmap: TBitmap; H,W: Integer); var Bmp: TBitmap; Source,Dest: TRect; begin Bmp := TBitmap.Create; try Source := Rect(0,Bitmap.Width,Bitmap.Height); Dest := Source; Dest.Offset(Bitmap.Width div 2,Bitmap.Height div 2); Bitmap.SetSize(W,H); Bmp.Assign(Bitmap); Bmp.Canvas.FillRect(Source); Bmp.Canvas.CopyRect(Dest,Bitmap.Canvas,Source); Bitmap.Assign(Bmp); finally Bmp.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); begin ResizeBitmapCanvas(Image1.Picture.Bitmap,110,110); end; 如果您在加载到TImage中的位图上尝试上述实际位图不居中,则画布会改变大小. 我为Image设置的属性是: Image1.AutoSize := True; Image1.Center := True; Image1.Stretch := False; 我认为它可能是Dest.Offset行(Bitmap.Width div 2,Bitmap.Height div 2);需要查看,计算正确的中心位置? 最近的问题David Heffernan回答说,该代码已经过调整/修改. 如何调整围绕位图的画布,但不拉伸位图? 解决方法
我认为这就是你要找的东西:
procedure ResizeBitmapCanvas(Bitmap: TBitmap; H,W: Integer; BackColor: TColor); var Bmp: TBitmap; Source,Dest: TRect; Xshift,Yshift: Integer; begin Xshift := (Bitmap.Width-W) div 2; Yshift := (Bitmap.Height-H) div 2; Source.Left := Max(0,Xshift); Source.Top := Max(0,Yshift); Source.Width := Min(W,Bitmap.Width); Source.Height := Min(H,Bitmap.Height); Dest.Left := Max(0,-Xshift); Dest.Top := Max(0,-Yshift); Dest.Width := Source.Width; Dest.Height := Source.Height; Bmp := TBitmap.Create; try Bmp.SetSize(W,H); Bmp.Canvas.Brush.Style := bsSolid; Bmp.Canvas.Brush.Color := BackColor; Bmp.Canvas.FillRect(Rect(0,W,H)); Bmp.Canvas.CopyRect(Dest,Source); Bitmap.Assign(Bmp); finally Bmp.Free; end; end; 我不记得XE是否支持为TRect设置宽度和高度.如果没有,则将代码更改为 Source.Right := Source.Left + Min(W,Bitmap.Width); 等等. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |