使用TImage时Android下的低质量delphi用户界面设计

使用TImage时Android下的低质量delphi用户界面设计,android,delphi,image-processing,firemonkey,Android,Delphi,Image Processing,Firemonkey,由于Android手机以多种不同的屏幕分辨率发布,并且我的用户界面使用多个TImage组件“剥皮”,因此我遇到了一个主要的开发问题,我必须根据设备的屏幕分辨率缩放每个图像 出于某种我无法理解的原因,在Android下,TImage使用了一个非常低质量的定标器(可能是最近的邻居)进行插值,导致图像显示质量非常低(即使考虑到屏幕比例并且表单质量设置为高时,也会发生这种情况) 因此,这意味着我可以预先缩放并包含同一图像的多个不同分辨率,希望它看起来“足够近”(并使我的应用程序膨胀),或者我可以使用软件

由于Android手机以多种不同的屏幕分辨率发布,并且我的用户界面使用多个TImage组件“剥皮”,因此我遇到了一个主要的开发问题,我必须根据设备的屏幕分辨率缩放每个图像


出于某种我无法理解的原因,在Android下,TImage使用了一个非常低质量的定标器(可能是最近的邻居)进行插值,导致图像显示质量非常低(即使考虑到屏幕比例并且表单质量设置为高时,也会发生这种情况)

因此,这意味着我可以预先缩放并包含同一图像的多个不同分辨率,希望它看起来“足够近”(并使我的应用程序膨胀),或者我可以使用软件算法实时缩放图像,然后缓存结果以备以后运行

我选择了第二个选项,使用软件双三次定标器,但问题是我的应用程序有如此多的图像资源,第一次在高端移动设备上加载可能需要18秒

我知道使用OpenGL可以在硬件中实现我所需要的功能,但我还没有找到一个清晰的例子来说明如何在Delphi for Android中实现这一功能。即使不需要为OpenGL重新编码整个UI也可以完成

在设计方面,我有没有遗漏什么?
Embarcadero的修复是我唯一的机会吗?

我花了一段时间才锁定这一点,但以下是Android本机代码,它将以高质量扩展图像,比我能找到并优化的任何纯软件解决方案都要快得多:

uses Androidapi.JNI.Media, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNIBridge, FMX.Surfaces, FMX.Helpers.Android;

procedure AndroidResizeBitmap(srcBitmap,dstBitmap : TBitmap);
var
  sJBitmap     : JBitmap;
  ScaledBitmap : JBitmap;
  sSurface     : TBitmapSurface;
begin
  sSurface     := TBitmapSurface.Create;
  sSurface.Assign(srcBitmap);
  sJBitmap     := TJBitmap.JavaClass.createBitmap(sSurface.Width,   sSurface.Height,TJBitmap_Config.JavaClass.ARGB_8888);
  SurfaceToJBitmap(sSurface, sJBitmap);
  ScaledBitmap := TJBitmap.JavaClass.createScaledBitmap(sJBitmap,   dstBitmap.Width, dstBitmap.Height, True);
  sJBitmap     := nil;
  JBitmapToSurface(ScaledBitmap,sSurface);
  ScaledBitmap := nil;
  dstBitmap.Assign(sSurface);
  sSurface.Free;
  sSurface     := nil;
end;

按需缩放图像,这样您就不会一次就获得18秒的点击率。寻找更有效的缩放代码。标准方法是提供不同大小的图像。我认为您应该使用TImageList,加载图像,然后使用Glyph或TImage手动分配图像如果没有比您编写的代码更高效的软件库,我一点也不会感到惊讶。我的意思是,不借助汇编程序就可以编写高效的代码。通常,算法的选择和实现非常重要。也许你已经编写了最佳的代码,但也许没有。“在Android系统下,TImage是使用一个非常低质量的定标器进行插值的。”我无法重现这一点。这里几乎没有任何信息可以帮助我们给你一些答案。你们有多大的图像,你们如何将它们从哪个尺寸缩放到哪个尺寸,你们使用的代码,安卓API,你们是否看到多台设备上的问题。。。任何东西不管这里真正的问题是什么,在Android上编写自己的缩放算法是完全错误的解决方案。这个问题基本上是上一个问题的重复。信息甚至更少。你的最后一个问题也很糟糕,因为也没有关于你到底在做什么的信息。这也是你没有得到正确答案的原因。这也是你在这个问题上得不到适当答案的原因。