2012-01-10 16 views
5

जाहिर है यह एक महंगा/समय लेने वाला ऑपरेशन है। इसे सुधारने का कोई तरीका?BitmapFactory.decodeStream() की गति को बेहतर बनाने के लिए कोई तरीका?

Bitmap bm = BitmapFactory.decodeStream((InputStream) new URL(
              someUrl).getContent()); 

मेरा अनुमान है कि वहाँ वास्तव में कोई रास्ता नहीं इस अपेक्षाकृत तीव्र कार्रवाई से बचने के लिए है, लेकिन वास्तविक बिटमैप, जो जो कुछ के लिए कारणों बस नहीं है संचित करने से अगर कोई किसी भी तोड़ मरोड़ उनके द्वारा सुझाए गए सकता था देखने के लिए (अलग करना चाहता था यहाँ प्रासंगिक)

उत्तर

6

आप पूर्ण संकल्प की जरूरत नहीं है, तो आप इसे ही कभी वें पिक्सेल, जहां n 2. की शक्ति आप एक Options वस्तु जो आप BitmapFactory.decodeFile को पारित पर inSampleSize सेट करके ऐसा करते हैं पढ़ा हो सकता है। Options ऑब्जेक्ट पर inJustDecodeBounds सेट करके फ़ाइल से मेटा-डेटा को केवल पहले पास में पढ़कर नमूना आकार पा सकते हैं। इसके अलावा - नहीं, मुझे नहीं लगता कि इससे पहले से कहीं अधिक तेज करने के लिए एक आसान तरीका है।

संपादित करें, उदाहरण के लिए:

Options opts = new Options(); 
    // Get bitmap dimensions before reading... 
    opts.inJustDecodeBounds = true; 
    BitmapFactory.decodeFile(path, opts); 
    int width = opts.outWidth; 
    int height = opts.outHeight; 
    int largerSide = Math.max(width, height); 
    opts.inJustDecodeBounds = false; // This time it's for real! 
    int sampleSize = ??; // Calculate your sampleSize here 
    opts.inSampleSize = sampleSize; 
    Bitmap bmp = BitmapFactory.decodeFile(path, opts); 
+0

धन्यवाद एक बहुत! क्या आप विस्तार से बता सकते हैं "आप ऑब्जेक्ट ऑब्जेक्ट पर जस्टडेकोडबाउंड में सेट करके फ़ाइल से मेटा-डेटा को पहले पास में पढ़कर नमूना आकार पा सकते हैं।" थोड़ ज़्यादा? शायद एक उदाहरण के साथ? – LuxuryMode

+0

मैंने एक कोड उदाहरण जोड़ा है। यदि आपका नमूना आकार दो है, तो चौड़ाई और ऊंचाई कम हो जाएगी। यदि यह 4 है तो यह चौथा और इसी तरह होगा। –

+0

ऐसा करने में समाप्त हुआ: (इसमें से अधिकांश Fedorvlasov.lazylist से लिया गया) https://gist.github.com/1589700 – LuxuryMode

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