दिलचस्प पोस्ट
आरएसए एन्क्रिप्शन, खराब लंबाई हो रही है जावास्क्रिप्ट का उपयोग करते हुए सीएसएस स्टाइलशीट को बदलना संभव है? (नहीं एक वस्तु की शैली, लेकिन स्टाइलशीट खुद) अजगर सुंदर सूप तालिका पार्सिंग सीतनिद्रा में होना, @ स्यूजेन्स जनरेटर और आवंटन आकार सी # से सी + + डीएलएल और पीछे से स्ट्रिंग पासिंग – न्यूनतम उदाहरण Datetime के लिए डीडी / एमएम / य्याय स्वरूपित स्ट्रिंग परिवर्तित करना क्या GWT का उपयोग करके एमवीपी में ऑब्जर्वर पैटर्न का उपयोग करने का एक अनुशंसित तरीका है? एआरसी या एआरसी के लिए नहीं? पक्ष और विपक्ष क्या होते हैं? टुकड़ा लेनदेन एनीमेशन समाप्त होने के बाद कार्रवाई कर रहा है Node.js में सुरक्षित यादृच्छिक टोकन (grep) गैर-एएससीआईआई वर्णों से मिलान करने के लिए रेगेक्स? आईओएस एप सबमिशन: 64-बिट समर्थन लापता सी # में कस्टम अपवादों को कार्यान्वित करने के लिए उद्योग मानक श्रेष्ठ अभ्यास क्या हैं? अक्षांश और देशांतर के लिए एक क्षेत्र पर 3D निर्देशांक पीएल / एसक्यूएल, कैसे एक स्ट्रिंग में एकल बोली से बचने के लिए?

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

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

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

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

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

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

यदि आप वास्तव में ऐसा करना चाहते हैं तो यह संभव है, लेकिन इसकी बहुत मेमोरी लागत है और धीमा भी है यह काम नहीं करेगा यदि आपके पास पुराने फोन और बड़ा बिटमैप है आप इसे बस एक अतिरिक्त के रूप में पारित कर सकते हैं, उदाहरण के लिए 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"); } 

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