gpt4 book ai didi

android - 如何使用Delphi XE5在IOS上保存位图图片

转载 作者:行者123 更新时间:2023-11-28 19:04:33 26 4
gpt4 key购买 nike

我需要,并且希望在我从互联网下载图像后将图像保存到用户设备(iOS 或 Android),这样用户就不必多次下载图像。

据我了解,在 iOS 上,我只能保存 JPG 或 PNG 文件格式。如何将位图文件从 delphi 转换为 .JPG 或 .PNG 图片文件?我在 VCL 中看到支持 TPNGImages,但不支持 FMX。

当我使用 SomeBitmap.bitmap.SaveToFile(GetHomePath+PathDelim+'Documents'+PathDelim+'Pictures'+PathDelim+PictureName+'.png';它什么都不做,也不抛出异常。帮助 ? ?

通过 Delphi XE5 为 iOS/Android 开发

最佳答案

TBitmap.SaveToFile在给定有效的文件名和位置时,工作得非常好(至少在 Android 上——我无法与 iOS 通话)。但是,如果您不这样做,它只会默默地失败而不会出错,大概是因为在某些移动操作系统上很难处理异常。所以实际的问题是提供的文件名或位置,在这种情况下,它似乎是位置。

永远不要假设您可以猜出跨平台的文件夹位置。始终使用 TPath 中的函数返回的文件夹之一.它们在 Standard RTL Path Functions across the Supported Target Platforms 下的 Delphi 文档中列出。 ;在这种情况下,您正在寻找 TPath.GetPicturesPath ,在 Android 上返回类似于 '/storage/emulated/0/Pictures' 的内容. (根据文档,目前在 iOS 设备上没有可访问的图片目录,尽管在模拟器上似乎有。这可能是 iOS 本身的限制;您必须检查 Apple iOS 文档以确定,然而。iOS 上的适当位置似乎在 TPath.GetDocumentsPath 返回的位置,根据 XE5 文档,它类似于 '/var/mobile/Applications/<application ID>/Documents'。)

其次,永远不要手动连接路径的各个部分。使用 TPath.Combine (来自 IOUtils 单元),如果需要,它将自动在适当的位置添加路径定界符。如果您需要这样做,您可以链接多个调用以获得所需级别的子文件夹:

为了可读性/可维护性(展示了 iOS 位置):

Dest := TPath.Combine(TPath.GetDocumentsPath, 'mydir');
Dest := TPath.Combine(Dest, 'tests');

或(为简洁起见):

Dest := TPath.Combine(TPath.Combine(TPath.GetDocumentsPath, 'mydir'), 'tests');

如果您需要在此过程中创建文件夹,TDirectory.CreateDirectory将创建它们,SysUtils.ForceDirectories 也是如此。 ;两者都可在所有支持的平台上使用。 (请注意,跨平台的是 SysUtilsForceDirectories 版本,而不是特定于 Windows 的 FileCtrl 版本。)

if not TDirectory.Exists(Dest, False) then
TDirectory.CreateDirectory(Dest);

// or
// SysUtils.ForceDirectories(Dest);

就文件格式而言,FMX.Graphics.TBitmap(通过 TBitmapCodecManager 类)在所有支持的平台上提供对以下格式的支持:

JPEG (.jpeg, .jpg) 
TIFF (.tiff, .tif)
GIF
PNG
BMP

这是在 Windows 上从位图转换为 .png 的示例;我没有 Android 设备可以在那里测试它,但类似的代码应该适合您(前提是您指定有效的文件夹位置和文件名,如上所述)。使用 XE5 Update 2 在 Win7 64 位上编译和测试。

procedure TForm1.FormShow(Sender: TObject);
var
BmpIn, BmpOut: TBitmap;
SaveParams: TBitmapCodecSaveParams;
begin
BmpIn := TBitmap.Create;
try
BmpIn.LoadFromFile('E:\TempFiles\ScreenCaps\CheckBoxChecked.bmp');

BmpOut := TBitmap.Create;
try
BmpOut.Assign(BmpIn);
SaveParams.Quality := 100;
BmpOut.SaveToFile('E:\TempFiles\ScreenCaps\CheckBoxChecked.png', @SaveParams);
finally
BmpOut.Free;
end;
finally
BmpIn.Free;
end;
end;

关于android - 如何使用Delphi XE5在IOS上保存位图图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21716601/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com