【问题标题】:How can I use JBitmap/JBitmapFactory to decode a PNG image within a TMemoryStream如何使用 JBitmap/JBitmapFactory 解码 TMemoryStream 中的 PNG 图像
【发布时间】:2018-11-08 06:35:09
【问题描述】:

使用 Delphi Tokyo 10.2.3 并以 Android 为目标,我正在创建多个线程来下载 PNG 图像并在后台对其进行解码。

由于此处解释的稳定性原因,不能使用 TBitmap: Getting multi-threaded safe RGBA values from a decoded PNG image running Android

我相信可以使用 JBitmap/JBitmapFactory 类对 PNG 文件进行解码,但我找不到任何有关如何做到这一点的文档。

我当前的代码将 PNG 图像下载到 TMemoryStream 中。我希望找到可以接收 TMemoryStream 并输出 JBitmap 的示例代码。

类似这样的:

function DecodeBitmapFromStream(mStream : TMemoryStream) : JBitmap;

【问题讨论】:

    标签: android delphi


    【解决方案1】:

    我相信可以使用 JBitmap/JBitmapFactory 类对 PNG 文件进行解码,但我找不到任何关于如何做到这一点的文档。

    在 Embarcadero 的 JNIBridge 框架中,带有 JTJ 的类型是原生 Android Java 类型的接口/类包装器。因此,您需要阅读 Google 的文档,在本例中为 BitmapBitmapFactory 类引用,然后根据需要调整属性和方法调用以适应 Embarcadero 的语法。

    我当前的代码将 PNG 图像下载到 TMemoryStream 中。我希望找到可以接收 TMemoryStream 并输出 JBitmap 的示例代码。

    试试这样的:

    function DecodeBitmapFromStream(mStream : TMemoryStream) : JBitmap;
    var
      data: TJavaArray<Byte>;
      size: Integer;
    begin
      size := mStream.Size;
      data := TJavaArray<Byte>.Create(size);
      Move(mStream.Memory^, data.Data^, size);
      Result := TJBitmapFactory.JavaClass.decodeByteArray(data, 0, size, nil);
    end;
    

    【讨论】:

      猜你喜欢
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      • 2019-03-19
      • 2021-08-29
      • 2010-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多