मुझे पूरा भरोसा है कि यह संभव है क्योंकि आप बिना किसी समस्या के ImageView
में वास्तव में बड़ी बिटमैप फ़ाइल लोड कर सकते हैं, इसलिए बड़े बिटमैप्स को संभालने के लिए एक तरह का अंतर्निहित तरीका होना चाहिए ... और कुछ प्रयासों के बाद पूरे बिटमैप लोड करने के बजाय
और मैन्युअल रूप से यह अपने आप को आकर्षित, एक Drawable
बजाय के रूप में यह लोड:, मैं एक समाधान मिल गया है
InputStream mapInput = getResources().openRawResource(
R.drawable.transit_map);
_map = Drawable.createFromStream(mapInput, "transit_map");
_map.setBounds(0, 0, _mapDimension.width(), _mapDimension.height());
मैं संसाधन फ़ाइल उपयोग कर रहा हूँ, लेकिन आप के बाद से से छवि लोड करने के लिए Drawable.createFromStream
का उपयोग कर सकते हैं कोई InputStream
, यह मनमाने ढंग से बिटमैप के साथ काम करना चाहिए।
फिर, इसलिए जैसे वांछित कैनवास पर यह आकर्षित करने के लिए Drawable.draw
विधि का उपयोग करें:
int left = -(int) contentOffset.x;
int top = -(int) contentOffset.y;
int right = (int) (zoom * _mapDimension.width() - contentOffset.x);
int bottom = (int) (zoom * _mapDimension.height() - contentOffset.y);
_map.setBounds(left, top, right, bottom);
_map.draw(canvas);
उपरोक्त मामले में के रूप में, तुम भी माप सकते हैं और drawable की सीमा में चालाकी करके रूप में अच्छी तरह बिटमैप अनुवाद और बिटमैप के केवल प्रासंगिक भाग लोड किए जाएंगे और Canvas
पर खींचे जाएंगे।
परिणाम केवल एक एकल 200 केबी बिटमैप फ़ाइल से एक चुटकी-ज़ूम करने योग्य दृश्य है। मैंने 22 एमबी पीएनजी फ़ाइल के साथ इसका परीक्षण भी किया है और यह स्क्रीन अभिविन्यास में परिवर्तन करते समय भी OutOfMemoryError
के बिना काम करता है।
आपके प्रश्न में, आपने कहा है कि छवि स्मृति में फिट नहीं है। क्या यह बदल गया है? –
नहीं, यह नहीं है। यह एक ही पीएनजी फ़ाइल है, पूरी बात है। – chakrit