【发布时间】:2015-01-04 11:28:53
【问题描述】:
社区,
我的问题如下:
我为我的 Kindle Fire 编写了一个 XE7 FMX 应用程序,我想在其中使用 TBitmaps。 问题是,我无法从设备的存储中创建 TBitmap。 如果我在我的计算机上将应用程序作为 Win32 应用程序运行,则一切正常,但如果我将其作为 android 应用程序运行,则会引发标题中的异常。
这是我的代码:
procedure TForm1.Button1Click(Sender: TObject);
var
MyImage: TBitmap;
Path: String;
begin
Path := TPath.GetDocumentsPath + TPath.DirectorySeparatorChar + 'test.png';
if TFile.Exists(path, true) then
begin
MyImage := TBitmap.CreateFromFile(path); //<- Here it fails
end;
end;
这段代码没有意义,但这只是一个测试程序。如果这可行,我可以在我的主程序中使用它,但此时它已经失败了。 (而且我已经检查过他使用的是 FMX.Graphics.TBitmap 而不是 VCL)
这是我的堆栈:
System._DbgExcNotify(86,0x11fc0b0,0x5bf3b0dd,0x11fc0b0,0x5bf3b0dd)
System.NotifyReRaise(0x11fc0b0,0x5bf3b0dd)
System._RaiseAtExcept(0x11fc0b0,0x5bf3b0dd)
System._RaiseExcept(0x11fc0b0)
System.Internal.Excutils.DoRaiseJNIExceptionCallBack('class java.lang.OutOfMemoryError','java.lang.OutOfMemoryError')
Androidapi.Jni.HandleJNIException(0xbe42f8)
Androidapi.Jnimarshal.ExecJNI(0x5d226490,0x125e998)
:5C8B8A14 DispatchToImport
:5C8C4FA8 dispatch_first_stage_intercept
Fmx.Graphics.Android.TBitmapCodecAndroid.LoadFromFile(0x127e7f8,'/data/data/com.embarcadero.Project1/files/test.png',0x1297040,4096)
Fmx.Graphics.TBitmapCodecManager.LoadFromFile(0x5cbab65c,'/data/data/com.embarcadero.Project1/files/test.png',0x1297040,4096)
Fmx.Graphics.TBitmap.LoadFromFile(0x127e788,'/data/data/com.embarcadero.Project1/files/test.png')
Fmx.Graphics.TBitmap.TBitmap(0x127e788,1,'/data/data/com.embarcadero.Project1/files/test.png')
Unit1.TForm1.Button1Click(0xad1c48,0x103dbd8)
[...] rest is unneccessary
错误在哪里? 是我的错还是delphi出了什么问题?
【问题讨论】:
-
图片有多大?如果它非常大,它可能会超出应用程序的内存限制。请告诉我们它的尺寸和文件大小?
-
顺便说一句,提供一个简短的演示程序做得很好——很多人不这样做。很高兴看到有人像这样投入调试工作,尤其是在小型测试/演示中重现。干得好,+1。
-
我的测试图像非常小。文件大小为 8 KB,图像大小为 290p*250p。我只用颜料画了一个随意的黑色“A”。没有透明度或特殊的东西。不知道为什么这个测试图加载不出来。
-
如果我把所有这些东西放在一起,我开始相信这是一个 Delphi 内部错误,而不是我的错。如果是这样,我有一个大问题,因为我需要这个来工作......
-
尝试在 Google+ 组、Delphi iOS 和 Android 开发人员上发帖,并附上包含问题图像的完整示例项目的链接。有人可能会帮助你。位图确实可以在 Android 上运行,我敢肯定,所以...
标签: android delphi firemonkey delphi-xe7 tbitmap