4

ギャラリー内のすべての画像が、画像ビューにバインドされる画像描画可能ではなく、bitmapfactoryを使用する動的画像ビューを作成したいと思います。このためのbitmapfactoryチュートリアルを持っているいくつかのサイトはありますか?ビットマップファクトリーを使用すると、画像を画像ビューにバインドするよりも少ないメモリを使用すると思いますか?これは正しいですか?また、メモリリークのリスクを最小限に抑えたいので、bitmapfactoryを使用したいと思います。助けてください。ビットマップファクトリーを教える基本的な例が見つかりません。

4

1 に答える 1

20

ビットマップオブジェクトの構築

1)ファイルから

プッシュオプション付きのadbツールを使用して、test2.pngをSDカードにコピーします

これは、SDカードからビットマップをロードする最も簡単な方法です。画像へのパスをBitmapFactory.decodeFile()に渡すだけで、残りはAndroidSDKに任せます。

public class TestImages extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ImageView image = (ImageView) findViewById(R.id.test_image);
        Bitmap bMap = BitmapFactory.decodeFile("/sdcard/test2.png");
        image.setImageBitmap(bMap);
    }
}

このコードは、以前にsdcardにコピーした画像test2.pngをロードするだけです。BitmapFactoryは、この画像を使用してビットマップオブジェクトを作成し、このImageView.setImageBitmap()メソッドを使用してImageViewコンポーネントを更新します。

2)入力ストリームから

BitmapFactory.decodeStream()BufferedInputStreamをビットマップオブジェクトに変換するために使用します。

public class TestImages extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ImageView image = (ImageView) findViewById(R.id.test_image);
        FileInputStream in;
        BufferedInputStream buf;
        try {
            in = new FileInputStream("/sdcard/test2.png");
            buf = new BufferedInputStream(in);
            Bitmap bMap = BitmapFactory.decodeStream(buf);
            image.setImageBitmap(bMap);
            if (in != null) {
            in.close();
            }
            if (buf != null) {
            buf.close();
            }
        } catch (Exception e) {
            Log.e("Error reading file", e.toString());
        }
    }
}

このコードは、基本的なJava FileInputStreamとBufferedInputStreamを使用して、の入力ストリームを作成しますBitmapFactory.decodeStream()。FileInputStreamまたはBufferedInputStreamによってスローされた例外をキャッチするには、ファイルアクセスコードをtry/catchブロックで囲む必要があります。また、ストリームハンドルを使い終わったら、それらを閉じる必要があります。

3)Androidプロジェクトのリソースから

BitmapFactory.decodeResource(res, id)Androidリソースからビットマップを取得するために使用します。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    ImageView image = (ImageView) findViewById(R.id.test_image);
    Bitmap bMap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
    image.setImageBitmap(bMap);
}
于 2012-06-25T02:27:38.387 に答える