दिलचस्प पोस्ट
मैं यूआईएलबल में टेक्स्ट के उपस्ट्रिंग के लिए CGRect कैसे खोजूं? संख्याओं के साथ फ़ाइल नाम से फाइलों की सूची कैसे लाएं? जेवीएम, जेडीके, जेआरई और ओपन जेडीके में क्या अंतर है? महीना वर्ष दिखाने के लिए केवल jQuery UI DatePicker मैं एंड्रॉइड डिवाइस के माउंटेड बाह्य संग्रहण की सूची कैसे प्राप्त करूं? क्यों नहीं करता है <T> स्ट्रीम () और समानांतर स्ट्रीम () तरीके प्रदान नहीं करें? जावास्क्रिप्ट में संदर्भ द्वारा पास चर "चेतावनी: हेडर सूचना को संशोधित नहीं किया जा सकता है -" त्रुटि द्वारा पहले ही भेजे गए हेडर " मैं डीजेंगो में उपयोगकर्ता आईपी पता कैसे प्राप्त करूं? रनटाइम पर जावा एनोटेशन को स्कैन करना Promise.all: हल मूल्यों का क्रम क्या PHP में देर से स्थिर बाइंडिंग हैं? WebBrowser नियंत्रण में प्रदान की जाने वाली HTML (जावास्क्रिप्ट द्वारा संसाधित) कैसे प्राप्त करें? क्यों नहीं getchar () मेरे लिए scanf () के बाद दर्ज करने के लिए इंतजार? क्या पहले पूरे रिपॉजिटरी को चेक किए बिना विरल चेक करना संभव है?

बंडलों का उपयोग करते हुए एंड्रॉइड गतिविधियों के बीच आप छवियों (बिटमैप) को कैसे पारित करते हैं?

मान लीजिए कि गैलरी से एक छवि का चयन करने के लिए मेरे पास एक गतिविधि है, और इसे एक बिटमैप के रूप में पुनः प्राप्त करें, उदाहरण के लिए: यहां

अब, मैं किसी दूसरी गतिविधि के लिए एक छविदृश्य में उपयोग करने के लिए इस बिटमैप को पास करना चाहता हूं। मुझे पता है कि गतिविधियों के बीच बंडलों को पार किया जा सकता है, लेकिन मैं कैसे इस बिटमैप को बंडल में संग्रहीत करूँगा?

या क्या मुझे एक और दृष्टिकोण चाहिए?

वेब के समाधान से एकत्रित समाधान "बंडलों का उपयोग करते हुए एंड्रॉइड गतिविधियों के बीच आप छवियों (बिटमैप) को कैसे पारित करते हैं?"

मैं बहुत अलग दृष्टिकोण की सिफारिश करेगा

यदि आप वास्तव में ऐसा करना चाहते हैं तो यह संभव है, लेकिन इसकी बहुत मेमोरी लागत है और धीमा भी है यह काम नहीं करेगा यदि आपके पास पुराने फोन और बड़ा बिटमैप है आप इसे बस एक अतिरिक्त के रूप में पारित कर सकते हैं, उदाहरण के लिए intent.putExtra("data", bitmap) । एक बिटमैप पार्सलेट योग्य लागू करता है, इसलिए आप इसे अतिरिक्त में डाल सकते हैं इसी तरह, एक बंडल ने putParcelable

यदि आप इसे क्रियाकलापों के बीच में पारित करना चाहते हैं, तो मैं इसे एक फाइल में संग्रहीत करूँगा यह आपके लिए और अधिक कुशल और कम काम है आप MODE_PRIVATE का उपयोग करते हुए अपने डेटा फ़ोल्डर में निजी फाइल बना सकते हैं जो कि किसी भी अन्य ऐप के लिए पहुंच योग्य नहीं है।

यदि आप इसे एक पार्सलेबल के रूप में पास करते हैं, तो आपको जवा लेंदर विफलता त्रुटि मिलती है। इसलिए, समाधान यह है: यदि बिटमैप छोटा है, जैसे, एक थंबनेल, इसे एक बाइट सरणी के रूप में पास करें और अगले गतिविधि में प्रदर्शन के लिए बिटमैप का निर्माण करें। उदाहरण के लिए:

आपकी कॉलिंग गतिविधि में …

 Intent i = new Intent(this, NextActivity.class); Bitmap b; // your bitmap ByteArrayOutputStream bs = new ByteArrayOutputStream(); b.compress(Bitmap.CompressFormat.PNG, 50, bs); i.putExtra("byteArray", bs.toByteArray()); startActivity(i); 

… और आपकी प्राप्त गतिविधि में

 if(getIntent().hasExtra("byteArray")) { ImageView previewThumbnail = new ImageView(this); Bitmap b = BitmapFactory.decodeByteArray( getIntent().getByteArrayExtra("byteArray"),0,getIntent().getByteArrayExtra("byteArray").length); previewThumbnail.setImageBitmap(b); } 

@ ईबो माइक द्वारा सुझाए गए अनुसार मैंने अपने आवेदन के आंतरिक मेमोरी में अपने आईएमएज नाम की फ़ाइल में बिटमैप को बचाया नहीं, मेरे अन्य ऐप्स को एक्सेस नहीं किया। यहां उस भाग का कोड है:

 public String createImageFromBitmap(Bitmap bitmap) { String fileName = "myImage";//no .png or .jpg needed try { ByteArrayOutputStream bytes = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes); FileOutputStream fo = openFileOutput(fileName, Context.MODE_PRIVATE); fo.write(bytes.toByteArray()); // remember close file output fo.close(); } catch (Exception e) { e.printStackTrace(); fileName = null; } return fileName; } 

उसके बाद की अगली गतिविधि में आप इस फ़ाइल को अपने कोड को डीआईडी कर सकते हैं।

 Bitmap bitmap = BitmapFactory.decodeStream(context .openFileInput("myImage"));//here context can be anything like getActivity() for fragment, this or MainActivity.this 

नोट रिक्त और स्केलिंग बिटमैप के लिए बहुत सी जांच की जाती है

बिटमैप पार्सलेट योग्य है ताकि आप [putExtra (स्ट्रिंग, पार्सलेट योग्य)] [2] विधि का उपयोग करके जोड़ सकते हैं, लेकिन यह सुनिश्चित नहीं है कि यह एक सर्वोत्तम अभ्यास है, यदि यह बड़े आकार का डेटा है तो एक ही स्थान पर स्टोर करना और दोनों गतिविधियों से उपयोग करना बेहतर है ।

[2]: http://developer.android.com/reference/android/content/Intent.html#putExtra(java.lang.String , android.os.Parscelable)

गतिविधि

Activites के बीच एक बिटमैप पास करने के लिए

 Intent intent = new Intent(this, Activity.class); intent.putExtra("bitmap", bitmap); 

और गतिविधि कक्षा में

 Bitmap bitmap = getIntent().getParcelableExtra("bitmap"); 

टुकड़ा

टुकड़ों के बीच बिटमैप पास करने के लिए

 SecondFragment fragment = new SecondFragment(); Bundle bundle = new Bundle(); bundle.putParcelable("bitmap", bitmap); fragment.setArguments(bundle); 

द्वितीय खंड में प्राप्त करने के लिए

 Bitmap bitmap = getArguments().getParcelable("bitmap"); 

बड़ा बिटमैप स्थानांतरित करना (बिटमैप संकुचित करें)

यदि आप असफल बांधने वाली लेन-देन प्राप्त कर रहे हैं, तो इसका मतलब है कि आप बड़े तत्व को एक गतिविधि से दूसरे गतिविधि में स्थानांतरित करके बाइंडर लेन-देन बफर से अधिक हो रहे हैं।

इसलिए उस मामले में आपको बिटमैप को एक बाइट के सरणी के रूप में संपीड़ित करना होगा और फिर इसे किसी अन्य गतिविधि में बिना असम्पीडित करना होगा

प्रथम गतिविधि में

 Intent intent = new Intent(this, SecondActivity.class); ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPG, 100, stream); byte[] bytes = stream.toByteArray(); intent.putExtra("bitmapbytes",bytes); 

और दूसरी गतिविधि में

 byte[] bytes = getIntent().getByteArrayExtra("bitmapbytes"); Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); 

पहले। जावा में

 Intent i = new Intent(this, second.class); i.putExtra("uri",uri); startActivity(i); 

दूसरे में। जावा

 Bundle bd = getIntent().getExtras(); Uri uri = bd.getParcelable("uri"); Log.e("URI", uri.toString()); try { Bitmap bitmap = Media.getBitmap(this.getContentResolver(), uri); imageView.setImageBitmap(bitmap); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } 

मुझे लेन-देन की बाइंडर की 1 एमबी सीमा से अधिक नहीं होने के लिए बिटमैप को थोड़ा ढकना पड़ा आप अपनी स्क्रीन 400 को अनुकूलित कर सकते हैं या इसे डायनामिक बना सकते हैं, यह सिर्फ एक उदाहरण है। यह ठीक काम करता है और गुणवत्ता अच्छी है यह भी बहुत तेजी से छवि को बचाने और इसे लोड करने के बाद, लेकिन आपके पास आकार की सीमा है

 public void loadNextActivity(){ Intent confirmBMP = new Intent(this,ConfirmBMPActivity.class); ByteArrayOutputStream stream = new ByteArrayOutputStream(); Bitmap bmp = returnScaledBMP(); bmp.compress(Bitmap.CompressFormat.JPEG, 100, stream); confirmBMP.putExtra("Bitmap",bmp); startActivity(confirmBMP); finish(); } public Bitmap returnScaledBMP(){ Bitmap bmp=null; bmp = tempBitmap; bmp = createScaledBitmapKeepingAspectRatio(bmp,400); return bmp; 

}

निम्नलिखित कोड के साथ अपनी अगली गतिविधि में बीएमएम को पुनर्प्राप्त करने के बाद:

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_confirmBMP); Intent intent = getIntent(); Bitmap bitmap = (Bitmap) intent.getParcelableExtra("Bitmap"); } 

मुझे उम्मीद है कि मेरा जवाब किसी तरह सहायक था अस्सलाम वालेकुम