【发布时间】:2015-08-21 13:57:54
【问题描述】:
我目前正在处理由于多种原因无法调整大小或压缩的非常大的图像 (7-10mb)。
现在,我们的想法是在自定义 ImageView 中显示它们,使用户能够执行双击缩放、捏缩放等操作。
我使用这个库来完成这项工作:https://github.com/MikeOrtiz/TouchImageView
我也尝试过其他库,但其他所有库仍然很慢。有人可以给我一些指示/建议以使其更快(甚至编写我自己的 C++ 实现)吗?
我对所有这些“Matrix”、“flig”、“scale”的东西有点迷茫,我不知道应该触摸什么来让它更快。如果您还知道其他更快的库(或者如何使用自定义的 Android 实现,它的运行速度非常快),那就太好了。
【问题讨论】:
-
它们的像素大小有多大?你能把它们上传到 GLES 纹理吗?
-
抱歉,什么是 GLES 纹理?顺便说一句,它们是 3680x3288、6.4MB,不能调整大小或缩放。
-
在大多数设备上,OpenGL-ES 纹理最高可达 4096x4096,但一些低端设备可能会限制为 2048x2048。 GLES 可以处理缩放(和旋转,以及您可能想做的任何其他事情)。您的图像在磁盘上可能是 6.4MB,但它们在内存中是 46MB(假设每像素 32 位),因为它们必须在显示之前解压缩;在软件中处理这么多数据不会很快,所以最好让 GPU 来做。
-
我该怎么做才能让 GPU 来处理它?
-
你需要学习一点 OpenGL-ES,它带有一点学习曲线。您可以在 Grafika (github.com/google/grafika) 中找到一些示例,例如“来自相机的纹理”显示实时相机输入的缩放和旋转。您需要使用
glTexImage2D()将图像上传到纹理然后显示它,而不是从相机接收数据。你可以在TextureUploadActivity#runTextureTest()中看到一个例子(这是一个离屏基准);在这两个示例之间,我认为您拥有所需的所有部分。
标签: android c++ image-scaling zooming