के साथ बिटमैप डीकोडिंग मैं BitmapFactory.decodeFile
का उपयोग कर एसडी कार्ड से बिटमैप्स डीकोड करता हूं। कभी-कभी बिटमैप एप्लिकेशन की ज़रूरतों के मुकाबले बड़े होते हैं या ढेर की अनुमति देता है, इसलिए मैं subsampled (छोटे) बिटमैप का अनुरोध करने के लिए BitmapFactory.Options.inSampleSize
का उपयोग करता हूं।एंड्रॉइड में सही आकार
समस्या यह है कि प्लेटफ़ॉर्म SampleSize के सटीक मान को लागू नहीं करता है, और मैं कभी-कभी बिटमैप के साथ समाप्त होता हूं, या तो उपलब्ध स्मृति के लिए बहुत छोटा या फिर भी बड़ा होता है।
http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize से:
नोट: डिकोडर इस अनुरोध को पूरा करने की कोशिश करेंगे, लेकिन जिसके परिणामस्वरूप बिटमैप विभिन्न आयामों कि ठीक क्या अनुरोध किया गया है हो सकता है। इसके अलावा, 2 की शक्तियां अक्सर डिकोडर के लिए सम्मान के लिए तेज़/आसान होती हैं।
मैं कैसे डिकोड चाहिए एसडी कार्ड से बिटमैप्स सटीक आकार यथासंभव कम स्मृति लेने वाली, जबकि यह डिकोड करने की आवश्यकता का एक बिटमैप पाने के लिए?
संपादित करें:
वर्तमान स्रोत कोड:
BitmapFactory.Options bounds = new BitmapFactory.Options();
this.bounds.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePath, bounds);
if (bounds.outWidth == -1) { // TODO: Error }
int width = bounds.outWidth;
int height = bounds.outHeight;
boolean withinBounds = width <= maxWidth && height <= maxHeight;
if (!withinBounds) {
int newWidth = calculateNewWidth(int width, int height);
float sampleSizeF = (float) width/(float) newWidth;
int sampleSize = Math.round(sampleSizeF);
BitmapFactory.Options resample = new BitmapFactory.Options();
resample.inSampleSize = sampleSize;
bitmap = BitmapFactory.decodeFile(filePath, resample);
}
क्या आप केवल 2 शक्तियों का उपयोग कर रहे हैं? मैं पूरी तरह से समझ सकता हूं कि ऐसा कुछ क्यों पसंद करेगा, लेकिन मुझे यकीन नहीं है कि मैंने कभी ऐसा एपीआई संदर्भ देखा है - "हम आपको जो कुछ भी मांगते हैं उसे देने का प्रयास करेंगे, लेकिन यह पूरी तरह से कुछ और हो सकता है "। – MusiGenesis
आकार को नियंत्रित करने के लिए आप भी अपने बिटमैप के आउटविड्थ और आउटहाइट गुणों को सेट करना चाहते हैं। – MusiGenesis
मैं 2 शक्तियों का उपयोग नहीं कर रहा हूं। दो की शक्तियां बहुत सीमित हैं और परिणामस्वरूप बिटमैप या तो बहुत छोटे या बहुत बड़े हैं। शायद मुझे एक और एपीआई का उपयोग करना चाहिए? – hpique