gpt4 book ai didi

android - 有没有办法从 Android 文件中加载和绘制部分位图?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:55:51 26 4
gpt4 key购买 nike

假设我在磁盘上有一个有点大的(即不适合大多数手机的内存)位图。我只想以不缩放的方式在屏幕上绘制它的一部分(即 inSampleSize == 1)

有没有一种方法可以只加载/绘制我想要的部分给定 Rect 指定区域而不加载整个位图内容?

最佳答案

我非常有信心这是可能的,因为您可以毫无问题地将非常大的位图文件加载到 ImageView 中,因此必须有某种内置的方法来处理大位图。 .经过几次尝试,我找到了解决方案:

与其加载整个位图并自己手动绘制,不如将其加载为 Drawable:

InputStream mapInput = getResources().openRawResource(
R.drawable.transit_map);
_map = Drawable.createFromStream(mapInput, "transit_map");

_map.setBounds(0, 0, _mapDimension.width(), _mapDimension.height());

我使用的是资源文件,但由于您可以使用 Drawable.createFromStream 从任何 InputStream 加载图像,它应该适用于任意位图。

然后,使用 Drawable.draw 方法将其绘制到所需的 Canvas 上,如下所示:

int left = -(int) contentOffset.x;
int top = -(int) contentOffset.y;
int right = (int) (zoom * _mapDimension.width() - contentOffset.x);
int bottom = (int) (zoom * _mapDimension.height() - contentOffset.y);

_map.setBounds(left, top, right, bottom);
_map.draw(canvas);

如上例所示,您还可以通过操纵可绘制对象的边界来缩放和平移位图,并且只有位图的相关部分将被加载并绘制到 Canvas .

结果是仅来自一个 200KB 位图文件的双指缩放 View 。我还使用 22MB 的 PNG 文件对其进行了测试,它仍然可以在没有任何 OutOfMemoryError 的情况下工作,包括当屏幕方向发生变化时。

关于android - 有没有办法从 Android 文件中加载和绘制部分位图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3704885/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com