2012-07-12 36 views
13

मेरे पास मेरे एसडी कार्ड पर 2448x3264 छवि है जो 1,667,072 बाइट्स का उपभोग करती है लेकिन जब मैं इसे बिटमैप के रूप में लोड करता हूं और getRowBytes()*getHeight() का उपयोग करके इसका आकार गणना करता हूं तो मैं 15, 9 80,544 बाइट्स के साथ समाप्त होता हूं।एंड्रॉइड में डिस्क की तुलना में बिटमैप आकार मेमोरी में क्यों बड़ा है?

ऐसा क्यों होता है और मैं फ़ाइल के वास्तविक आकार की गणना कैसे कर सकता हूं?

+0

इस छवि का प्रारूप क्या है? –

+0

प्रारूप जेपीईजी है। मुझे लगता है कि देवुनवायर ने जवाब दिया – Saqib

उत्तर

37

ऐसा इसलिए है क्योंकि डिस्क पर होने पर छवि संपीड़ित होती है (जेपीजी, पीएनजी, या इसी तरह के प्रारूप में संग्रहीत)। एक बार जब आप छवि को स्मृति में लोड कर लेते हैं, तो यह अब संकुचित नहीं होता है और सभी पिक्सेल (आमतौर पर आरजीबीए_8888 के लिए चौड़ाई * ऊंचाई * 4, या आरजीबी_565 के लिए चौड़ाई * ऊंचाई * 2) के लिए आवश्यक स्मृति को लेता है।

+0

ठीक है, अब मैं समझता हूं। बस पुष्टि करने के लिए कि क्या मैं bitmap.compress (बिटमैप.कंप्रेसफॉर्मैट प्रारूप, int गुणवत्ता) का उपयोग करके बिटमैप को एक फ़ाइलऑटपुटस्ट्रीम पर संपीड़ित करता हूं और फिर भी बिटमैप को फिर से पढ़ता हूं, फिर भी यह बड़ा आकार देगा। सही? – Saqib

+1

सही, एक संपीड़ित छवि केवल एक फ़ाइल भंडारण प्रारूप है। वास्तव में डेटा के साथ काम करने के लिए, इसे स्मृति में एक पूर्ण बिटमैप में वापस फुलाया जाना है। – Devunwired

+0

मेरे पास एंड्रॉइड पर मेम में 1024 * 600 आईएमजी पढ़ा जा रहा है। मेरे कैल्क्स 1024 * 600 * 4 = ~ 3 एमबी कहते हैं जबकि डीडीएमएस मुझे मेम में 4.2 एमबी बता रहा है, किसी भी विचार से अतिरिक्त ओवरहेड का कारण क्या है? – Dori