如何使用Skia4Delphi调整图像大小(Delphi 10.3.3 VCL)
在Delphi 10.3.3 VCL中用Skia4Delphi调整图像尺寸后保存
要实现指定宽高的图像缩放,核心是创建目标尺寸的绘图表面,再通过Skia的缩放绘制方法将原图像适配到新尺寸上。以下是修改后的完整代码:
var LImage: ISkImage; LSurface: ISkSurface; LPaint: ISkPaint; // 指定目标宽高 TargetWidth, TargetHeight: Integer; begin TargetWidth := 800; // 替换为你需要的宽度 TargetHeight := 600; // 替换为你需要的高度 // 加载原始图像 LImage := TSkImage.MakeFromEncodedFile('C:\IMAGE-OLD.PNG'); // 创建用于缩放的Paint,配置缩放质量 LPaint := TSkPaint.Create; LPaint.FilterQuality := TSkFilterQuality.High; // 高画质缩放,适合保留细节 LPaint.IsAntialias := True; // 让缩放边缘更平滑 // 创建目标尺寸的绘图表面 LSurface := TSkSurface.MakeRaster(TargetWidth, TargetHeight); // 将原图像缩放绘制到目标表面:用DrawImageRect指定目标区域 LSurface.Canvas.DrawImageRect( LImage, TRectF.Create(0, 0, LImage.Width, LImage.Height), // 原图像完整区域 TRectF.Create(0, 0, TargetWidth, TargetHeight), // 目标绘制区域 LPaint ); // 保存调整后的图像 LSurface.MakeImageSnapshot.EncodeToFile('C:\IMAGE-NEW.PNG'); end;
关键补充说明:
- 保持宽高比的缩放:如果不想让图像拉伸变形,可以先计算适配目标尺寸的等比例矩形,再进行绘制,示例代码如下:
var LImageRect, LTargetRect: TRectF; Scale: Single; begin // ... 省略图像加载、Paint创建等代码 ... // 计算等比例缩放的目标矩形(居中显示) LImageRect := TRectF.Create(0, 0, LImage.Width, LImage.Height); Scale := Min(TargetWidth / LImage.Width, TargetHeight / LImage.Height); LTargetRect := TRectF.Create( (TargetWidth - LImage.Width * Scale) / 2, // 水平居中偏移 (TargetHeight - LImage.Height * Scale) / 2, // 垂直居中偏移 (TargetWidth + LImage.Width * Scale) / 2, (TargetHeight + LImage.Height * Scale) / 2 ); // 按等比例绘制图像 LSurface.Canvas.DrawImageRect(LImage, LImageRect, LTargetRect, LPaint); end;
内容的提问来源于stack exchange,提问作者Xel Naga
相关产品推荐
相关产品推荐

