2012-10-26 15 views
9

को बड़ी छवि सहेजा जा रहा है मैं सिर्फ एक कठिन समस्या encontered है ...पीएनजी

यहाँ मेरी कहानी है:

मेरा डिवाइस सैमसंग गैलेक्सी नोट, सामान्य रूप से, यह चित्रों 3264 के एक संकल्प पर ले जाता है * 2448 पिक्सेल। जब मैं विस्तृत जानकारी ढूंढने के लिए कोशिश कर रहा हूं, तो मुझे अच्छी तस्वीरें पसंद हैं, लेकिन यहां मुझे इससे नफरत है क्योंकि एंड्रॉइड में इसे संभालना बहुत बड़ा है। मैं इस बड़े संकल्प की एक छवि को पढ़ और प्रदर्शित कर सकता हूं, मुझे इसके शीर्ष पर रेखाएं खींचने की ज़रूरत है, फिर मुझे चित्र और रेखा दोनों को एक पीएनजी में सहेजने की ज़रूरत है। मेरे सिर में दर्द है कि मेरे एंड्रॉयड हमेशा मुझे, memery अपवाद से बाहर देता है जब इस तरह की एक अस्थायी बिटमैप बनाने के लिए कोशिश कर रहा हूँ है:

Bitmap bmp = Bitmap.createBitmap(3264, 2448, Config.RGB_565); 
    Canvas cv = new Canvas(bmp); 
    //draw a line and save and restore canvas 
    // I found an alternative solution yet proven to be uncorrect: 
    myImageView.setDrawingCacheEnabled(true); 
    myImageView.buildDrawingCache(true); 
    Bitmap bmp = myImageView.getDrawingCache(); 
    //save bmp to png 

bmp.width * bmp.height * 4 > getScaledMaximumDrawingCacheSize() 

अपवाद बाहर कूदता है। मैंने myImageView.measure(...) और myImageView.layout(...) का परीक्षण किया है, मेरे लिए काम नहीं किया है। (चीजें ठीक हैं, जब मैं छोटी छवियों का उपयोग करके एक ही कोड का परीक्षण करता हूं)

किसी भी विशेषज्ञ को पता है कि इस समस्या को कैसे मारना है या मुझे हल करना है? धन्यवाद!

+0

आप याद है कि आकार और गुणवत्ता के एक बिटमैप के लिए आवश्यक गणना की है। आप जिस मंच के लिए विकास कर रहे हैं, उसके बावजूद यह बहुत बड़ा है, लेकिन यदि आप अपने बिटमैप ऑब्जेक्ट्स को सावधानीपूर्वक प्रबंधित नहीं कर रहे हैं, तो आपको प्रतिबंधित मेमोरी डिवाइस पर अधिक परेशानी मिली है। – paulkayuk

+1

आप http://stackoverflow.com/questions/10993568/android-image-file-size-limit-and-how-to-handle-large-images – erbsman

+0

पर एक नज़र डालना चाहते हैं शायद आप पहले खंड का प्रयास करना चाहें कई टुकड़ों में बड़ा बिटमैप फिर उन पर लाइनों को ध्यान से खींचें और संरेखित करें। फिर आपको छोटे टुकड़े को पूर्ण बड़े बिटमैप पर वापस रखना होगा। – dumbfingers

उत्तर

1

शायद निश्चित समाधान नहीं है, लेकिन क्या आपने ढेर आकार बढ़ाने की कोशिश की?

Android 2.2 या के संस्करणों के लिए:

dalvik.system.VMRuntime.getRuntime().setMinimumHeapSize(sizeInBytes); 

एंड्रॉयड 2.3 or or higher versions के लिए:

android:largeHeap="true" 
संबंधित मुद्दे