delphi - 如何将 Viewport3D 保存为图像文件?
问题描述
我正在使用 Delphi 10.3.3 开发 Firemonkey (FMX) 应用程序。
我有一个 Viewport3D 组件。在 Viewport3D 内,我有许多 3D 形状,例如 TCube 和 TRectangle3D。
我需要将 Viewport3D 的内容(当前视图的屏幕截图)保存到图像文件中。我更喜欢保存为透明的 PNG。我怎样才能做到这一点?
解决方案
Image1.Bitmap.Assign( Viewport3D1.MakeScreenshot );
用于将位图转换为 png;
Uses FMX.Surfaces;
procedure TMain.Button1Click(Sender: TObject);
var
Stream: TMemoryStream;
Surf: TBitmapSurface;
begin
Stream:=TMemoryStream.Create;
Stream.Position := 0;
Surf := TBitmapSurface.Create;
try
Surf.Assign(Viewport3D1.MakeScreenshot);
if TBitmapCodecManager.SaveToStream(Stream, Surf, '.png') then
Begin
Stream.SaveToFile('screenshot.png');
End
Else
raise EBitmapSavingFailed.Create('Error saving Bitmap to png');
finally
Stream.Free;
Surf.Free;
end;
end;
推荐阅读
- symmetricds - Symmetricds 支持空间数据库?
- java - 我不明白复制构造函数是如何工作的
- jquery - JQuery保存文件并从中读取而不是每次都打开新版本
- amazon-web-services - 跨账户 IAM 访问被 GUI 客户端拒绝,但通过 CLI 允许
- python - 如何在 Python 的不同目录中读取/创建文件
- android - 是否可以在android中同时从两个后置摄像头获取信息?
- python - 将字符串从变量保存到 .txt 并检查变量是否与下一个循环中已使用的字符串匹配
- php - WooCommerce 数据库更新用户界面
- bash - 为资源提取 arn 时 bash 中的奇怪行为
- sql - 带年、月、日的两个日期之间的天数差异