2012-02-20 22 views
17

के साथ एक छवि को स्केल करने के लिए कैसे करें मैं बिटमैपफ़ैक्टरी.decodeFile (पथ, विकल्प) के साथ एसडी कार्ड से एक छवि को डीकोड करना चाहता हूं।
मैं उन छवियों को भी चाहता हूं जो 2048x2048 पिक्सेल से बड़े हैं, जिन्हें अधिकतम 2048x2048 (अनुपात बनाए रखना) तक घटाया जाना चाहिए।
मैं बिटमैप प्राप्त करने के बाद मैन्युअल रूप से ऐसा कर सकता हूं, लेकिन इसके लिए आवंटित किए गए लोगों के अलावा बड़ी मात्रा में बाइट आवंटित करने की आवश्यकता होगी।
मुझे यह प्रभाव प्राप्त करने के लिए अपने बिटमैप फैक्टरी.ऑप्शन ऑब्जेक्ट को कैसे सेट अप करना चाहिए?
धन्यवादएंड्रॉइड बिटमैप फैक्टरी विकल्प

उत्तर

10

BitmapFactory.Options.inSampleSize का उपयोग करें जब आप पहली बार अपने लक्ष्य आकार के आकार के आकार को प्राप्त करने के लिए अपनी छवि लोड करते हैं, तो Bitmap.createScaledBitmap का उपयोग अपने इच्छित आकार के पैमाने पर करने के लिए करें।

this answer में इसके लिए कुछ कोड है।

3

आप कुछ इस तरह की कोशिश कर सकते हैं:

int imageWidth, imageHeight; 

Bitmap result = Bitmap.createScaledBitmap(bitmapPicture, 
         imageWidth, imageHeight, false); 

यहाँ आप अपनी खुद की चौड़ाई और ऊंचाई जोड़ सकते हैं। bitmapPictureBitmap का ऑब्जेक्ट है। मुझे बताएं कि यह आपके लिए कोई मदद है या नहीं।

+1

जैसा कि मैंने कहा, मैं एक और 2048x2048 पिक्सेल आवंटित करने से बचने की कोशिश कर रहा हूं, लेकिन बिटमैप फैक्टरी स्वचालित रूप से ऐसा करता है, क्योंकि मैं स्मृति पर बहुत छोटा हूं। आपकी विधि सिर्फ एक नया बिटमैप आवंटित करती है जो मैं नहीं चाहता हूं। हालांकि उत्तर के लिए धन्यवाद। – saarraz1

5

inJustDecodeBounds से true को अपने Options में सेट करके प्रारंभ करें, यह आपको छवि का आकार लोड किए बिना छवि का आकार देगा।
यदि छवि का आकार छोटा है तो आपका अधिकतम आकार, फिर इसे सामान्य रूप से लोड करें।
यदि दूसरी ओर, यह बहुत बड़ा है, तो छोटे बिटमैप को पढ़ने के लिए inSampleSize का उपयोग करें।

नोट: मुझे नहीं लगता कि डिकोडिंग जब inSampleSize का उपयोग कर, तो आप कुछ विस्तार से खो सकता है किसी भी छानने करता है, लेकिन के रूप में अपनी छवि का आकार इतना बड़ा है (2048 पिक्सेल) मुझे नहीं लगता कि यह होगा किसी भी समस्या का कारण बनता है।