我的应用需要加载建筑平面图,然后在平面图上绘制对象(家具)。平面图图像是 2500 x 1500 240Kb PNG,但由于需要 12+Mb 的堆来创建位图,因此需要 12+Mb 的堆来使大多数设备崩溃,给我一个 OutOfMemory 错误。让我在这里澄清一下:据我所知,这不是内存泄漏,而 bitmap.recycle() 什么也不做,因为它在第一次创建第一个图像时崩溃了。除非我使用使图像无法识别的样本大小,否则使用 inSampleSize 读取图像无济于事。这整个情况很疯狂。我在 Droid 3、HTC Inspire 和两个 2.3 模拟器上进行测试。HTC 将加载地图,模拟器(可笑)堆大小为 128Mb。这个应用程序的部署将在所有安卓用户中使用,所以我可以'
这是我当前的代码,它给了我一个无法使用的图像(来自另一个 SO 帖子,抱歉我丢失了链接):
BitmapFactory.Options o=new BitmapFactory.Options();
o.inJustDecodeBounds=true;
BitmapFactory.decodeResource(getResources(), resourceId, o);
//Find the correct scale value. It should be the power of 2.
int scale=16;
while((o.outWidth/scale)>=REQUIRED_SIZE || (o.outHeight/scale)>=REQUIRED_SIZE)
scale*=2;
BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize = scale;
Bitmap base_image;
try {
base_image = BitmapFactory.decodeResource(getResources(), resourceId);
} catch (Error e1) {
base_image = BitmapFactory.decodeResource(getResources(), resourceId, options);
}
GLSurfaceView 会在这里解决我的问题吗?我需要它来 1) 加载平面图图像,2) 允许我以编程方式绘制对象和文本标签,以及 3) 支持缩放并根据平面图坐标对触摸做出反应。如果这是答案,任何人都可以为这样的基本 2D 工作推荐一个好的教程吗?