2013年10月17日木曜日

Androidで画像を扱う

目次へ



  • リソースIDからImageViewにイメージを表示する
  • リソースIDで指定した画像をBitmapオブジェクトに変換する
  • Bitmapオブジェクトをbyte配列に変換する
  • byte配列をBitmapオブジェクトに変換する
  • BitmapオブジェクトをImageViewに表示する
  • ImageViewの画像を消す


■リソースIDからImageViewにイメージを表示する

layoutのxmlで指定するなら、次のようにします。
@drawable/ic_launcherはres-drawableの中にic_launcher.pngなどがあったら、その拡張子を除いたものです。
<ImageView
   android:id="@+id/gazou"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:src="@drawable/ic_launcher" />


プログラムの中でリソースに登録された画像をセットするなら次のようになります。
 ImageView v = (ImageView)findViewById(R.id.gazou);
 v.setImageResource(R.drawable.ic_launcher);



■リソースIDで指定した画像をBitmapオブジェクトに変換する

 Resources r = getResources();
 Bitmap bmp = BitmapFactory.decodeResource(r, R.drawable.ic_launcher);



■Bitmapオブジェクトをbyte配列に変換する

SqLiteに保存するときなどbyte配列に変換する必要があります。
上で作成したBitmapオブジェクトをbyte配列に変換するのが下のプログラムです。
compressメソッドの第2引数はcompressorへのヒント用に0-100の値を入れ、0は画像サイズが小さいことを示し、100は大きいことを示します。
ただ、pngなどの形式ではこの値は無視されると書いてありますので、まあ、適当な値を入れておけばよいのでしょう。
また、第1引数は、画像の形式がPNGであることを示します。JPEGなら、CompressFormat.JPEGとなります。
 ByteArrayOutputStream baos = new ByteArrayOutputStream();
 bmp.compress(CompressFormat.PNG, 100, baos);
 byte[] bytes = baos.toByteArray();



■byte配列をBitmapオブジェクトに変換する

今度は逆にbyte配列をBitmapオブジェクトに変換します。
SqLiteに保存されていた画像を表示する時などに必要です。
decodeByteArrayの第2引数はオフセット(bytes配列のどこからか)を示します。
第3引数はオフセットから数えて何バイトを変換するかを示します。
 Bitmap bmp = null;
 byte[] bytes = xxx; //ここに画像データが入っているものとする
 if (bytes != null) {
   bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
 }



■BitmapオブジェクトをImageViewに表示する

上で作成したBitmapオブジェクトをImageViewに表示するには次のようにします。
 ImageView v = (ImageView)findViewById(R.id.gazou);
 v.setImageBitmap(bmp);



■ImageViewの画像を消す

これでよいのかどうかわかりませんが、これを実行するとエラーにもならず、画像は消えます
 ImageView v = (ImageView)findViewById(R.id.gazou);
 v.setImageBitmap(null);



にほんブログ村 IT技術ブログ IT技術メモへ
にほんブログ村

1 件のコメント: