2012-01-13 16 views
6

का उपयोग करते समय एंड्रॉइड में गलत छवि आयाम I have.png छवि फ़ाइल मेरे एंड्रॉइड एप्लिकेशन में संसाधन के रूप में संग्रहीत है। मेरे कोड में, मैं इस प्रकार है कि छवि से नया बिटमैप उदाहरण allocationg हूँ:बिटमैप

Bitmap img = BitmapFactory.decodeResource(getResources(), R.drawable.imgName); 

लेकिन जब मैं getWight() और getHeight() तरीकों का उपयोग कर बिटमैप वस्तु से छवि आयाम, पढ़

int width = img.getWidth(); 
int height = img.getHeight(); 

मुझे मूल छवि से अलग-अलग परिणाम मिल रहे हैं ... क्या कोई मुझे बता सकता है कि मुझे क्या याद आ रहा है, और मैं छवि आकार को कैसे पुनः प्राप्त कर सकता हूं?

(मेरी परियोजना एंड्रॉयड 2.2 से पालन किया जाता है - एपीआई 8)

संपादित करें: ठीक है - पता चला वास्तविक आयाम प्राप्त करने के लिए कैसे:

: पालन सही पर BitmapFactory.Options वर्ग के inJustDecodeBounds संपत्ति की स्थापना
BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inJustDecodeBounds = true; 
    BitmapFactory.decodeResource(getResources(), R.drawable.imgName, options); 
    width = options.outWidth; 
    height = options.outHeight; 

समस्या अब है कि डिकोडर अशक्त रिटर्न जब हम Options तर्क भेज है, इसलिए मैं डिकोड करने के लिए फिर से है कि मैं पहले किया था, Bitmap उदाहरण -bizarre पुनः प्राप्त करने की जरूरत है (Options तर्क के बिना ...) है ना?

उत्तर

3

एंड्रॉइड विभिन्न छवियों के लिए आपकी छवि को स्केल करता है (विभिन्न स्क्रीन संकल्पों और आकारों के लिए एक तरीके से)। Drawable-ldpi, drawable-hdpi, drawable-xhdpi, drawable फ़ोल्डर्स में अपनी छवि की एक अलग प्रति रखें।

+0

अपने जवाब के लिए धन्यवाद, लेकिन क्या आप जानते हैं, अगर वहाँ एक कर "असली" छवि आकार पाने का तरीका? –

+0

@ET सबसे आसान तरीका यह हार्डकोडिंग है। वैसे भी आप उस छवि के आकार को जानेंगे जिसे आपने खींचने योग्य फ़ोल्डर में रखा है। स्पष्ट रूप से मैंने वास्तविक आकार – manjusg

+1

प्राप्त करने की कोशिश नहीं की है, इसलिए मैं इस समाधान का उपयोग नहीं कर सकता क्योंकि चित्र बहुत गतिशील हैं, और उन्हें भविष्य में वेब सेवा से पुनर्प्राप्त किया जा सकता है। इसके अलावा - मेरे पास बहुत सारी छवियां हैं :) –

8

सटीक संसाधन छवि उपयोग पाने के लिए:

BitmapFactory.Options o = new Options(); 
    o.inScaled = false; 
    Bitmap watermark = BitmapFactory.decodeResource(context.getResources(), id, o); 

यह स्वचालित स्क्रीन घनत्व स्केलिंग बंद हो जाती है।

अद्यतन: मुझे यकीन है कि अब तक आप इसे महसूस कर चुके हैं, लेकिन inJustDecodeBounds बस यही करता है, यह आयाम पाता है। आपको एक छवि नहीं मिलेगी। वह विकल्प आम तौर पर कस्टम स्केलिंग करने के लिए होता है। आप decodeResource दो बार फोन कर, दूसरी बार सेटिंग अंत:

options.inJustDecodeBounds = false; 

और बनाने के विकल्प के लिए किसी भी समायोजन के आधार पर अपनी:

width = options.outWidth; 
height = options.outHeight; 
+0

ओपी की तलाश में नहीं हो सकता है, लेकिन यह निश्चित रूप से मुझे बहुत मदद की, धन्यवाद। – r41n

+0

आपको बहुत धन्यवाद, यह मेरे लिए अविश्वसनीय रूप से उपयोगी था! – noobcoder

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