2011-02-26 19 views
15

1 से लोड होने के बाद बिटमैप चौड़ाई/ऊंचाई अलग है। i'am एंड्रॉयड के लिए नए कोडन :)संसाधन

मुझे क्या करना मैं अपने रेस/

BitmapFactory.decodeResource(getResources(), R.drawable.cat_ground_01); 

साथ drawable-MDPI से एक बिटमैप लोड होने के बाद मैं बिटमैप की चौड़ाई/ऊंचाई यह मुझसे कहता है लॉग आउट करें एक अन्य मूल्य तो बिटमैप वास्तव में है।

बिटमैप्स पिक्सेलपरफेक्ट को रखना मुश्किल है। मुंह के बिटमैप के साथ चेहरे का एक बिटमैप ओवरलैप करें।

शायद मैं इस विषय के लिए कुछ ज्ञान खो रहा हूं: 9 मुझे उम्मीद है कि आप मदद कर सकते हैं।

उत्तर

28

आप Bitmapfactory.decodeResource(), एंड्रॉयड करते हैं तो डिफ़ॉल्ट रूप से आपकी क्या उल्लेख किया कोड में होगा पैदावार "का मिलान" डीपीआई डिकोड करने के लिए संस्करण, का चयन करेंगे:

  1. आप यह है कि क्या निर्दिष्ट नहीं कर सकते एमडीपीआई, एचडीपीआई या जो कुछ भी है, वह उस संस्करण का चयन करेगा जो आपके चल रहे सिस्टम से मेल खाता है। यानी, यदि आप एक एमडीपीआई डिवाइस पर चल रहे हैं, तो यह एमडीपीआई संस्करण को डीकोड करेगा; ldpi में, फिर ldpi संस्करण।

  2. आप एक hdpi डिवाइस का उपयोग कर रहे हैं मान लीजिए, लेकिन कोई mdpi संसाधन परिभाषित किया गया है, यह क्या होंगे और अपना mdpi संसाधन ले जाता है, और डिकोड के दौरान, यह यह hdpi में कर देगा (यानी, यह आपके mdpi बिटमैप के बारे में विस्तार 1.5x बड़ा); दोबारा, यदि आपके डिवाइस में कम रिज़ॉल्यूशन है तो यह छवि

मुझे लगता है कि यह आपके साथ होता है। BitmapFactory के लिए, यह वास्तव में विकल्प है नहीं छवि स्केलिंग के लिए:

http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html

inScaled को गलत क्या करेंगे सेट करें।

+0

बहुत बहुत धन्यवाद। मैंने सोचा कि ऐसा कुछ चल रहा था लेकिन मुझे यकीन था। –

4

बिटमैप की चौड़ाई/ऊंचाई लॉग आउट करने के बाद यह मुझे एक अन्य मूल्य बताता है तो बिटमैप वास्तव में है।

बिटमैप को लोड करने/खींचने के बाद अपने विकल्प.in लक्ष्यीकरण और विकल्प.in घनत्व की जांच करें। वे बराबर नहीं हैं (उदाहरण के लिए 160 और 240)। यदि options.inScaled को सत्य पर सेट किया गया है (डिफ़ॉल्ट) - यही कारण है कि बिटमैप स्वचालित रूप से सहेजा जा रहा है।

लोड करने के बाद छवि को पुन: सहेजने के लिए बिटमैप.क्रेटस्केल्ड बिटमैप का उपयोग करने का एक और तरीका है। क्योंकि कभी-कभी आपको इनस्केल्ड = सच्चे

 //Target dimensions 
     int iW = 300; 
     int iH = 200; 
     Bitmap mOriginalBitmap = new Bitmap; 
     BitmapFactory.Options options = new BitmapFactory.Options(); 
     //Load image from resource 
     mOriginalBitmap = BitmapFactory.decodeResource(getResources(), 
       R.drawable.sample_image_900px, options); 
     //Scale to target size 
     mOriginalBitmap = Bitmap.createScaledBitmap(mOriginalBitmap, iW, iH, true); 
+0

यह अतिरिक्त प्रदर्शन मुद्दों को लाता है। जब यह वास्तव में आवश्यक है तो यह एक कामकाज है। – radhoo

9

क्या आप संसाधन को नोडपी फ़ोल्डर में नहीं डाल सकते हैं?

अर्थात रेस/drawable-nodpi

यह मैंने पहले भी क्या किया है है।