2012-03-11 17 views
18

है यह मेरा गतिविधि का एक हिस्सा है:एंड्रॉइड। यह से छवि का आकार प्राप्त करने संसाधन आईडी

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 के अंदर फिट होना चाहता हूं। मुझे पहले से ही इसे हल करने के तरीके के बारे में उत्तर मिल गए हैं लेकिन मेरे लिए एक समस्या है: मैट्रिक्स का उपयोग कर केंद्रित छवि बनाने के लिए मुझे इसकी चौड़ाई और ऊंचाई जानने की आवश्यकता है। क्या आपके पास छवि आकार प्राप्त करने का कोई तरीका है जब आपके पास int संसाधन है?

उत्तर

40

उपयोग BitmapFactory.decodeResource संसाधन की एक बिटमैप वस्तु प्राप्त करने के लिए, और फिर बिटमैप से आप आसानी से getHeight और getWidth

इसके अलावा के साथ छवि चौड़ाई/ऊंचाई को पुनः प्राप्त recycle अपने बिटमैप

संपादित करने के लिए मत भूलना कर सकते हैं :

इस तरह आपको आउटपुट के रूप में null बिटमैप मिलेगा, लेकिन बिटमैपफ़ैक्टरी.ऑप्शन बिटमैप के साथ और ऊंचाई के साथ सेट किए जाएंगे। तो, इस मामले में, आपको बिटमैप

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

आपको 'बिटमैप फैक्टरी.ऑप्शन आयाम = नया बिटमैप फैक्ट्री.ऑप्शन(); dimensions.inJustDecodeBounds = true; 'वास्तव में बिटमैप को स्मृति में लोड किए बिना छवि आयामों को डीकोड करने के लिए। – dmon

+0

बेहतर एक, धन्यवाद डॉन – Blackbelt

+0

मेरे लिए क्यों mBitmap शून्य के रूप में आ रहा है अगर मैं JustDecodeBounds = true में सेट करता हूं? अगर मैं इसे गलत पर सेट करता हूं तो यह मुझे बिटमैप लौटा रहा है। – Ankit

11

किसी भी व्यक्ति के लिए जो डॉन की टिप्पणी नहीं पढ़ता है, को रीसायकल करने की आवश्यकता नहीं है। ऐसा करने के लिए कोड इस तरह दिखता है:

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

तक आपका मतलब है कि 'बिटमैपफ़ैक्टरी.decodeResource (getResources(), R.drawable.your_photo, opt); '? – Warpspace

+0

निश्चित रूप से किया था। मैं अपना उत्तर – xbakesx

+0

अपडेट करूंगा धन्यवाद @xbakesx सबसे अच्छा समाधान! –

संबंधित मुद्दे