मैं स्क्रीन पर एक छवि प्रदर्शित करना चाहता हूं (मेरे पास एक ऐसी गतिविधि है जो एक छवि प्रदर्शित करती है):
Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
ExifInterface exif = new ExifInterface(imagePath);
int rotation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
int rotationInDegrees = exifToDegrees(rotation);
Matrix matrix = new Matrix();
matrix.preRotate(rotationInDegrees);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
आखिरी पंक्ति java.lang.OutOfMemoryError फेंकता है
मैं समझ नहीं पा रहा हूं कि यह कैसे करें ... मुझे पहले बिटमैप बनाना है (बिटमैपफैक्टरी.decodeFile) लेकिन जब मैं इसे घुमाने के लिए चाहता हूं तो मुझे पहले से ही स्रोत बिटमैप प्रदान करना होगा - मैं इससे कैसे बच सकता हूं?
धन्यवाद
उत्तर:
उत्तर № 1 के लिए 1आप इसे जोड़कर डीकोड करने से पहले छवि को पहले आकार देने का प्रयास कर सकते हैं inSampleSize बिटमैप विकल्पों में। जैसा दस्तावेज़ में बताया गया है: http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize
यदि मान> 1 पर सेट किया गया है, तो डीकोडर को मूल छवि को कम करने के लिए अनुरोध करें, स्मृति को सहेजने के लिए एक छोटी छवि लौटाएं।
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 5;
Bitmap bitmap = BitmapFactory.decodeFile(imagePath, options);
उम्मीद है की वो मदद करदे।
जवाब के लिए 0 № 2
यदि आप कहीं और पागल चीजें नहीं कर रहे हैं तो आपकी छवि शायद बहुत बड़ी है।
आपको बस अपनी ढेर बढ़ाने की जरूरत है। इसे अपनी मेनिफेस्ट फ़ाइल में जोड़ें:
android:largeHeap="true"
जवाब के लिए 0 № 3
आप बिटमैप को जगह में घुमा नहीं सकते हैं, क्योंकि आयाम अलग हो सकते हैं। मुझे नहीं पता, क्यों पहले से ही घुमावदार बिटमैप लोड करना असंभव है।
आप उपयोग के स्थान पर बिटमैप घुमा सकते हैं। बिटमैप ड्राइंग करते समय, घूर्णन के साथ खींचे जाने के लिए रोटेशन मैट्रिक्स का उपयोग करें।
दूसरी बात यह है कि आपको शायद अपने ऐप की समीक्षा करनी चाहिए और मेमोरी उपयोग को कम करने की कोशिश करनी चाहिए। हो सकता है कि आपके द्वारा उपयोग किए जाने वाले बिटमैप्स बहुत बड़े हैं और आपको विकल्पों का उपयोग इन नमूना आकार के साथ 2 या उससे अधिक के साथ करना चाहिए।