【问题标题】:Image Conversions in Android?Android中的图像转换?
【发布时间】:2023-12-05 00:49:01
【问题描述】:

我想构建一个转换图像格式的应用程序。我在尝试 将JPG图像转换为BMP,同时我得到OOM,导致应用程序 内存有限,无法使用数组存储图像 用于转换。如果是这种情况,那么有哪些应用程序可以做到 一样??

【问题讨论】:

    标签: android image bitmap jpeg


    【解决方案1】:

    我不知道实际转换的样子,但在每种情况下,您都需要一个缓冲区或类似的东西来消耗 jpg。由于 Android 内存堆在 24-48mb(一个内存块)之间,因此您在尝试转换时会耗尽内存。

    【讨论】:

      【解决方案2】:

      Android 应用程序的内存有限。可用内存量因设备而异。所以在旧设备上编辑大图像可能真的是个问题。

      解决方案是使用 NDK。在 NDK 中,您可以分配比 Java 应用程序更多的内存。

      【讨论】:

      • 我知道应用程序内存是有限的............我有一个 c 代码,它通过谷歌使用 libjpeg.so 将 jpeg 转换为 bmp。我已经尝试在 ndk 中使用它,但仍然没有找到方法。有什么提示吗??
      • Google 推荐的 NDK 并不多,它说只有在别无选择的情况下才使用它。那么目前在 Play Store 中他们是如何做到的呢?游戏占用大量内存,如何受限于有限的空间?
      • 好吧,我不知道 libjpeg 以及它如何处理内存。但是,如果您想超出 VM 内存限制(16-48 MB),您必须使用 NDK,您可以在其中分配更多内存(轻松 > 100 MB)。您基本上可以根据需要分配尽可能多的内存。的确,大多数应用程序不需要 NDK。但其中一个例外是游戏,它们大多是用 NDK 编写的。
      • 您在哪里找到了 libjpeg.so?您可能需要一个小的存根 .cpp 程序将 .jpg 传递给,然后让存根将图像发送到库进行转换,然后将转换后的文件传回 java。
      • 在 android 源中有一个 jpeg 源....我获取了源,在 ndk 中构建它并得到了 .so......在图像转换应用程序中使用它,我得到了只有 undefined ref....对于 .so 中存在的 apis