私のアプリは、建物の平面図を読み込んでから、平面図にオブジェクト (家具) を描画する必要があります。フロアプラン イメージは 2500 x 1500 240Kb PNG ですが、ビットマップを作成するために 12Mb 以上のヒープを必要とするため、ビットマップ ファクトリーがほとんどのデバイスをクラッシュさせ、OutOfMemory エラーが発生します。ここで明確にさせてください: これは、私が知る限り、メモリ リークではなく、最初のイメージの作成中に最初にクラッシュするため、 bitmap.recycle() は何もしません。画像を認識できないほどのサンプル サイズを使用しない限り、inSampleSize を使用して画像を読み取っても役に立ちません。この全体の状況はクレイジーです。Droid 3、HTC Inspire、および 2 つの 2.3 エミュレーターでテストしています。HTC は、128Mb の (ばかげた) ヒープ サイズを持つエミュレーターと同様に、マップをロードします。このアプリの展開は、さまざまな Android ユーザーに使用されるため、
これが私の現在のコードで、使用できない画像が表示されます(別の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 作業のための優れたチュートリアルを推奨できる人はいますか?