delphi - 将 Canvas 另存为图像

标签 delphi delphi-xe2

我正在使用Delphi XE2编写程序。我在 Canvas 上画一些线条和形状。我想使用保存对话框将该 Canvas 保存为图像文件。

所以我的表单上有一个保存按钮,单击它会打开保存对话框。我应该如何继续保存 Canvas ?

最佳答案

目前,您很可能在 OnPaint 事件中为 TPaintBox 或表单本身编写代码。该代码可能如下所示:

procedure TMyForm.PaintBox1Paint(Sender: TObject);
begin
  with PaintBox1.Canvas do
  begin
    MoveTo(0, 0);
    LineTo(42, 666);
    // and so on.
  end;
end;

我们需要进行一些重构。我们需要将该绘制代码提取到一个单独的方法中。向该方法传递一个 Canvas ,以便它不知道它在其上绘制的 Canvas 。

procedure TMyForm.PaintToCanvas(Canvas: TCanvas);
begin
  with Canvas do
  begin
    MoveTo(0, 0);
    LineTo(42, 666);
    // and so on.
  end;
end;

procedure TMyForm.PaintBox1Paint(Sender: TObject);
begin
  PaintToCanvas(PaintBox1.Canvas);
end;

我们现在完全回到了起点,但准备好向真正的目标发起冲击。让我们编写一个函数来绘制位图,然后保存到文件:

procedure TMyForm.PaintToFile(const FileName: string);
var
  Bitmap: TBitmap;
begin
  Bitmap := TBitmap.Create;
  try
    Bitmap.SetSize(Paintbox1.Width, Paintbox1.Height);
    PaintToCanvas(Bitmap.Canvas);
    Bitmap.SaveToFile(FileName);
  finally
    Bitmap.Free;
  end;
end;

这自然可以扩展到其他图像类型,例如 GIF、PNG、JPEG 等。

关于delphi - 将 Canvas 另存为图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20359313/

相关文章:

macos - Mac对Delphi XE4 Professional + Mobile Add-On的要求

delphi - 在 Delphi 中实现变更日志(步骤 2)

delphi - 如何在XE2中获取TExcelWorksheet(64位版本)?

multithreading - 空的新 VCL 表单应用程序下正在运行哪 4 个线程?

delphi - 如何在delphi中为azure blob存储生成MD5?

delphi - msbuild:如何选择应用程序商店进行配置

delphi - Delphi:如何使用无窗口控件?

android - 如何确认删除Delphi FMX And​​roid中的记录

Delphi Xe2 与 Firemonkey : Can you have a non-client area that is painted in a style other than the default Windows nonclient paint style?

delphi - 使用环境变量 "The program can' 进行调试时无法启动,因为 ....dll 丢失”