2012-03-11 19 views
18

Ésta es una parte de mi actividad:Android. La obtención de tamaño de la imagen de su ID de recursos

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); 
} 

trato de mostrar una imagen dentro de un ImageView utilizando una matriz como tipo de escala (Quiero añadir multitáctil más adelante). Pero antes de que el usuario inicie la interacción, quiero que la imagen se centre y encaje dentro de ImageView. Ya encontré respuestas sobre cómo resolverlo, pero hay un problema para mí: para hacer una imagen centrada usando la matriz. Necesito saber su ancho y alto. ¿Hay alguna forma de obtener tamaño de imagen cuando todo lo que tienes es int resource?

Respuesta

40

Uso BitmapFactory.decodeResource para obtener un objeto de mapa de bits del recurso, y luego desde el mapa de bits que puede recuperar fácilmente la imagen de anchura/altura con getHeight y getWidth

Asimismo, no se olvide de recycle su mapa de bits

EDITAR :

De esta manera obtendrá un mapa de bits null como salida, pero BitmapFactory.Options se establecerá con el y con la altura para el mapa de bits. Por lo tanto, en este caso, no necesita reciclar el mapa de bits

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; 
+12

También debe utilizar 'BitmapFactory.Options dimensiones = new BitmapFactory.Options(); dimensions.inJustDecodeBounds = true; 'para decodificar las dimensiones de la imagen sin cargar el mapa de bits en la memoria. – dmon

+0

mejor, gracias dmon – Blackbelt

+0

Para mí, ¿por qué mBitmap viene como nulo si configuro inJustDecodeBounds = true? Si lo configuro en falso, me está devolviendo un mapa de bits. – Ankit

11

Para cualquier persona que no haya leído el comentario de dmon. El código para hacer esto es el siguiente:

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 
+1

¿Quiere decir 'BitmapFactory.decodeResource (getResources(), R.drawable.your_photo, opt);'? – Warpspace

+0

Claro que sí. Actualizaré mi respuesta – xbakesx

+0

¡Gracias a @xbakesx la mejor solución! –

Cuestiones relacionadas