gpt4 book ai didi

java - 在 Canvas 上操作大图像以保持宽高比会导致内存不足问题

转载 作者:行者123 更新时间:2023-12-01 15:25:22 25 4
gpt4 key购买 nike

我正在尝试加载游戏的背景图像以及一些较小的图像,将它们放置在 Canvas 上,并让人们与较小的覆盖图像进行交互(例如移动、旋转)

为了保持宽高比(例如 5:3),我尝试将图像作为位图加载并自行调整其大小。这个想法是根据 Canvas 的宽度/高度对背景进行裁剪/信箱处理,并保持较小图像的正确尺寸比例。

Bitmap originalBitmap = BitmapFactory.decodeResource(getResources(), resourceImg);
Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg2, 0, 0, width, height, matrix, true);

为了适应平板电脑/手机,我有一个 1600x1000 和 200kb 的 PNG 背景图像。

但是,我现在正在努力解决内存不足的问题,因为位图在尝试调整大小时为 1600x1000x4byte=6.4 mb 的 ram 以及更多。(我目前正在使用模拟器,出现这些问题)

我决定将其更改为使用canvas.setBackgroundResource

    SceneCanvas sceneCanvas = (SceneCanvas) findViewById(R.id.the_canvas);
sceneCanvas.setBackgroundResource(R.drawable.my_scene_1600x900);

这效果很好,只是它填满了屏幕并且不保持宽高比。

有没有办法设置背景保持纵横比?或者我刚刚完全走错了路,应该使用 ImageViews 并以某种方式渲染到 Canvas 以避免内存不足问题

最佳答案

鉴于 Java 代码只允许使用大约 20MB 左右的堆大小,因此您在处理大位图时总是会遇到麻烦(除非您使用 C/C++/etc 中的 native 代码)。

一种选择是使用 BitmapFactory加载您的图像,并在Options中您可以指定 inSampleSize 在读入图像时对图像进行下采样。这应该避免尝试加载整个原始图像而占用内存。甚至还有一个 inJustDecodeBounds 选项,因此您的代码可以检查图像的尺寸,而不是将它们硬连接到代码中。

关于java - 在 Canvas 上操作大图像以保持宽高比会导致内存不足问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10241244/

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