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