You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 06:10:35