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

标签 android delphi image-processing firemonkey

由于 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;

关于android - Android下使用TImage时低质量delphi用户界面设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52989024/

相关文章:

windows - TNetSharingManager访问冲突问题

delphi - indy GET 下载速度

delphi - 有人用过德尔福的ICU吗?

java - Android - 使用 MediaPlayer 播放 RTSP 音频流

android - 如何更改 LIBGDX 默认游戏应用名称?

java - JSSE 引用指南中的 "the highest-priority implementation for the TrustManagerFactory"是什么?

image-processing - 使用 keras.preprocess.image.ImageDataGenerator 时如何定义我自己的自定义图像预处理功能

python-3.x - 如何使用opencv多次更改图像中4个像素的颜色?

php - 如何存储ImageMagick转换信息: in a variable in php

java - 尽管设备已收到消息,但未从 SMS 检索器 API 接收 SMS 内容