2012-03-11 13 views
18

Đây là một phần của Hoạt động của tôi:Android. Lấy kích thước hình ảnh từ nó là id nguồn

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

tôi cố gắng để hiển thị một hình ảnh trong một ImageView sử dụng một ma trận as type quy mô (Tôi muốn thêm cảm ứng đa điểm sau). Nhưng trước khi người dùng bắt đầu tương tác, tôi muốn hình ảnh được căn giữa và vừa với bên trong ImageView. Tôi đã tìm thấy câu trả lời liên quan đến cách giải quyết nó nhưng có một vấn đề đối với tôi: để làm cho hình ảnh tập trung sử dụng ma trận Tôi cần biết chiều rộng và chiều cao của nó. Có cách nào để nhận kích thước hình ảnh khi tất cả những gì bạn có là int resource?

Trả lời

40

Sử dụng BitmapFactory.decodeResource để có được một đối tượng Bitmap của tài nguyên, và sau đó từ bitmap bạn có thể dễ dàng lấy lại hình ảnh chiều rộng/chiều cao với getHeightgetWidth

Cũng đừng quên recycle bitmap

EDIT :

Bằng cách này, bạn sẽ nhận được một bitmap null làm đầu ra, nhưng BitmapFactory.Options sẽ được đặt bằng với và chiều cao cho bitmap. Vì vậy, trong trường hợp này, bạn không cần phải tái chế bitmap

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

Bạn cũng nên sử dụng 'BitmapFactory.Options dimensions = new BitmapFactory.Options(); dimensions.inJustDecodeBounds = true; 'chỉ giải mã kích thước hình ảnh mà không thực sự tải bitmap vào bộ nhớ. – dmon

+0

tốt hơn một, nhờ dmon – Blackbelt

+0

Đối với tôi lý do tại sao mBitmap là đến null nếu tôi đặt inJustDecodeBounds = true? Nếu tôi đặt nó thành sai, nó sẽ trả lại cho tôi một bitmap. – Ankit

11

Đối với những người không đọc nhận xét của dmon. Mã để làm như sau:

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

Bạn có nghĩa là 'BitmapFactory.decodeResource (getResources(), R.drawable.your_photo, opt);'? – Warpspace

+0

Chắc chắn rồi. Tôi sẽ cập nhật câu trả lời của mình – xbakesx

+0

Cảm ơn giải pháp tốt nhất @xbakesx! –