2012-09-01 15 views
5

पृष्ठभूमि:एंड्रॉइड बिटमैप पिक्सल - सीधे फ़ाइल पर लिखें?

लक्ष्य ओपनजीएल प्रस्तुत डेटा के साथ एक बड़ी (कम से कम 2048 x 2048 पिक्सल) छवि फ़ाइल लिखना है।

आज मैं पहली बार 32-बिट (argb8888) पिक्सेल डेटा को एक int सरणी में प्राप्त करने के लिए glReadPixels का उपयोग करता हूं।

फिर मैं डेटा को एक नई शॉर्ट सरणी में कॉपी करता हूं, 32-बिट argb मानों को 16-बिट (rgb565) मानों में परिवर्तित करता हूं। इस बिंदु पर मैं एंड्रॉइड बिटमैप डेटा (विभिन्न पंक्ति क्रम और रंगीन चैनल ऑर्डर) के साथ संगत ओपनग्ल-छवि डेटा को बनाने के लिए छवि को उल्टा कर देता हूं और रंग ऑर्डर बदलता हूं।

अंततः मैं एक बिटमैप() उदाहरण और .copyPixelsFromBuffer (बफर बी) बना देता हूं ताकि इसे डिस्क पर एक पीएनजी फ़ाइल के रूप में सहेज सकें।

हालांकि मैं कुछ फोन पर स्मृति क्रैश से बचने के लिए स्मृति को और अधिक कुशल बनाना चाहता हूं।


प्रश्न:

  1. मैं [] पूर्णांक से पहले परिवर्तन को छोड़ कर सकते हैं -> कम [] किसी तरह से (और पिक्सेल डेटा के लिए एक नई सरणी के आवंटन से बचने के)? हो सकता है कि केवल बाइट एरे/बफर का उपयोग करें और उसी पिक्सेल को उसी सरणी में लिखें जिसे मैंने पढ़ा है ...

  2. अधिक महत्वपूर्ण: क्या मैं बिटमैप निर्माण (यहां प्रोग्राम क्रैश हो सकता है) छोड़ सकता हूं और किसी भी तरह से डेटा सीधे लिख सकता हूं एक काम करने वाली छवि फ़ाइल के रूप में डिस्क (और बिटमैप ऑब्जेक्ट में पिक्सेल डेटा के आवंटन से बचें)?

संपादित करें: मैं फ़ाइल के डेटा को सीधे लिख सकते हैं, तो शायद मैं 16-बिट पिक्सेल डेटा कन्वर्ट करने के लिए, फ़ाइल आकार और कितनी तेजी से के आधार पर फ़ाइल पर स्मृति में पढ़ा जा सकता है की जरूरत नहीं है बाद का बिंदु

+0

+1 यह वास्तव में स्मृति उपयोग को कम करता है। पीएनजीजे के साथ मैं उस समय प्रत्येक पिक्सेल पंक्ति को पढ़ने में सक्षम हूं (और हाँ मैं नीचे -> शीर्ष पढ़ सकता हूं), और सीधे इसे एसडी-कार्ड पर लिख सकता हूं। मुझे सिर्फ एक (चौड़ाई x 3) बाइट सरणी आवंटित करने की आवश्यकता है और इसे प्रत्येक पंक्ति के लिए पुन: उपयोग करें। यह पहले की तुलना में कुछ भी नहीं है! :) – Ridcully

उत्तर

3

मुझे यकीन नहीं है कि इससे मदद मिल सकती है, लेकिन यह PNGJ लाइब्रेरी क्रमशः लाइन द्वारा लाइन पीएनजी लिखने की अनुमति देती है। यदि आपकी प्राथमिक चिंता अगर स्मृति उपयोग (और यदि आप प्रस्तुत डेटा से अंतिम पीएनजी फ़ाइल के क्रम में पिक्सेल मानों तक पहुंच सकते हैं) तो यह उपयोगी हो सकता है।

उत्कृष्टता से लिखित प्रश्न
+0

के लिए – cmbellman

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