web-dev-qa-db-ja.com

アンドロイド。リソースIDから画像サイズを取得する

これは私のアクティビティの一部です:

private ImageView mImageView;
private int resource;

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  resource = getIntent().getIntExtra("res", -1);

  Matrix initMatrix = new Matrix();

  mImageView = new ImageView(getApplicationContext());
  mImageView.setScaleType( ImageView.ScaleType.MATRIX );
  mImageView.setImageMatrix( initMatrix );
  mImageView.setBackgroundColor(0);
  mImageView.setImageResource(resource);
}

マトリックスをスケールタイプとして使用して、ImageView内に画像を表示しようとしています(後でマルチタッチを追加したい)。しかし、ユーザーがインタラクションを開始する前に、画像を中央に配置してImageView内に収めたいと思います。私はそれを解決する方法に関する答えをすでに見つけましたが、私にとって1つの問題があります:マトリックスを使用して画像を中央に配置するには、その幅と高さを知る必要があります。 int resourceだけの場合、画像サイズを取得する方法はありますか?

24
alex

BitmapFactory.decodeResource を使用してリソースのビットマップオブジェクトを取得すると、ビットマップから を使用して画像の幅/高さを簡単に取得できます。/getHeight および getWidth

また、ビットマップを recycle することを忘れないでください

編集:

このようにして、出力としてnullビットマップを取得しますが、BitmapFactory.Optionsは、ビットマップのwithとheightで設定されます。したがって、この場合、ビットマップをリサイクルする必要はありません。

BitmapFactory.Options dimensions = new BitmapFactory.Options(); 
dimensions.inJustDecodeBounds = true;
Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.bitmap, dimensions);
int height = dimensions.outHeight;
int width =  dimensions.outWidth;
46
Blackbelt

Dmonのコメントを読んでいない人のために。これを行うためのコードは次のようになります。

final Options opt = new BitmapFactory.Options();
opt.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(), R.drawable.your_photo, opt);

opt.outHeight; // height of resource
opt.outWidth; // width of resource
11
xbakesx