2010-07-10 11 views
14

मैं कैमरे के रूप में पुनर्प्राप्त छवियों के आकार को कम करने की कोशिश कर रहा हूं (इसलिए ~ 5-8 मेगा पिक्सल) नीचे कुछ छोटे आकारों (सबसे बड़ा 1024x768) है। मैंने निम्नलिखित कोड का प्रयास किया लेकिन मुझे लगातार OutOfMemoryError मिल गया।एंड्रॉइड में मेमोरी कुशल छवि का आकार

Bitmap image = BitmapFactory.decodeStream(this.image, null, opt); 
int imgWidth = image.getWidth(); 
int imgHeight = image.getHeight(); 

// Constrain to given size but keep aspect ratio 
float scaleFactor = Math.min(((float) width)/imgWidth, ((float) height)/imgHeight); 

Matrix scale = new Matrix(); 
scale.postScale(scaleFactor, scaleFactor); 
final Bitmap scaledImage = Bitmap.createBitmap(image, 0, 0, imgWidth, imgHeight, scale, false); 

image.recycle(); 

ऐसा लगता है कि ओओएम createBitmap के दौरान होता है। क्या ऐसा करने के लिए एक और अधिक मेमोरी प्रभावी तरीका है? शायद कुछ ऐसा जो मुझे पूरे मूल को स्मृति में लोड करने की आवश्यकता नहीं है?

उत्तर

16

के माध्यम से कैप्चर किया जा रहा है, जब आप बिटमैप फैक्ट्री के साथ बिटमैप को डीकोड करते हैं, तो बिटमैप फैक्ट्री में पास करें। ऑब्जेक्ट ऑब्जेक्ट पास करें और नमूना आकार में निर्दिष्ट करें। छवि को डीकोड करते समय स्मृति को सहेजने का यह सबसे अच्छा तरीका है।

यहाँ एक नमूना कोड Strange out of memory issue while loading an image to a Bitmap object

1

क्या आप अपने आवेदन के भीतर कैमरे के साथ तस्वीर ले रहे हैं? यदि ऐसा है, तो आपको android.hardware.Camera.Parameters.setPictureSize

+0

नहीं, मैं 'android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI' उपयोग कर रहा हूँ उपयोगकर्ता एक चित्र का चयन करते हैं। – Sionide21

0

है यहाँ एक समान प्रश्न है कि मैं के जवाब दिए और कैसे के बारे में गतिशील रूप से उचित छवि का आकार लोड हो रहा है जाने के लिए दिखाने के लिए है।

out of memory exception + analyzing hprof file dump

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