2012-07-03 21 views
7

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

एक पाठ लौटाना स्पष्ट है।

Intent data = new Intent(); 
data.putExtra("text1", "text."); 
data.putExtra("text2", "longer text."); 
setResult(RESULT_OK, data); 

लेकिन यह कैसे एक बिटमैप वापस जाने के लिए?

अधिक जानकारी: गतिविधि कई उद्देश्यों को जो कोई एक छवि प्राप्त करना चाहता है के लिए उपलब्ध हो गया है।

<intent-filter> 
    <action android:name="android.intent.action.GET_CONTENT" /> 
    <category android:name="android.intent.category.OPENABLE" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:mimeType="image/*" /> 
    <data android:mimeType="vnd.android.cursor.dir/image" /> 
</intent-filter> 
<intent-filter> 
    <action android:name="android.intent.action.PICK" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:mimeType="image/*" /> 
    <data android:mimeType="vnd.android.cursor.dir/image" /> 
</intent-filter> 

संपादित करें:

public void finish(Bitmap bitmap) { 
    try { 
     File folder = new File(Environment.getExternalStorageDirectory() + "/Icon Select/"); 
     if(!folder.exists()) { 
      folder.mkdirs(); 
     } 
     File nomediaFile = new File(folder, ".nomedia"); 
     if(!nomediaFile.exists()) { 
      nomediaFile.createNewFile(); 
     } 

     FileOutputStream out = new FileOutputStream(Environment.getExternalStorageDirectory() + "/Icon Select/latest.png"); 
     bitmap.compress(Bitmap.CompressFormat.PNG, 90, out); 
     File bitmapFile = new File(Environment.getExternalStorageDirectory() + "/Icon Select/latest.png"); 

     if(bitmapFile.exists()) { 
      Intent localIntent = new Intent().setData(Uri.fromFile(bitmapFile)); 
      setResult(RESULT_OK, localIntent);     
     } else { 
      setResult(RESULT_CANCELED); 
     } 
     super.finish(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
     Log.d("beewhale", "Error writing data"); 
    } 
} 
+0

आप क्या हासिल करने की कोशिश कर रहे हैं? इसका वर्णन करें –

उत्तर

5

जबकि मैं Ovidiu Latcu से सहमत हूं, तो आप स्मृति समस्याओं में भाग ले सकते हैं।

बिटमैप को एसडी कार्ड पर एक अस्थायी स्थान पर स्टोर करना बेहतर हो सकता है। और फिर वहां से इसका उपयोग करें। (फ़ाइल को बिटमैप लिखें और पढ़ें)।

वैकल्पिक रूप से, अगर आप एक अतिरिक्त के रूप में एक बाइट सरणी डालने साथ जाने के लिए चाहते हैं, किसी अन्य स्वरूप में बिटमैप संक्षिप्त पहले, उदा जेपीईजी या इसी तरह, यह फिर से स्मृति मुद्दों के परिवर्तन को कम करेगा।

एक साधारण 8M पिक्सेल छवि, 32MB (4 परतें) है। और यह एप्लिकेशन के लिए अधिकांश (यदि नहीं सभी) फोन पर अनुमत स्मृति उपयोग से अधिक है।

सीधे भंडारण के लिए भंडारण कैसे कैमरा एप्लिकेशन में बनाया इस समस्या से बचने के लिए काम करता है। यह होता है यहाँ, कैमरा एपीआई में बनाया - तुम भी कोड पारित कर दिया उरी के लिए, अपने बुलाया मंशा पर लिखने कि दुकानों की आवश्यकता होगी:

public void showCameraScreen(View view) { 
    // BUILT IN CAMERA 
    Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    camera.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getTempFile(this))); 
    this.startActivityForResult(camera, 1); 

} 

private File getTempFile(Context context) { 
    // it will return /sdcard/MyImage.tmp 
    final File path = new File(Environment.getExternalStorageDirectory(), context.getPackageName()); 
    if (!path.exists()) { 
     path.mkdir(); 
    } 
    return new File(path, "MyImage.tmp"); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == 1 && resultCode == RESULT_OK) { 
     final File file = getTempFile(this); 

     byte[] _data = new byte[(int) file.length()]; 
     try { 
      InputStream in = new FileInputStream(file); 
      in.read(_data); 
      in.close(); 
      in = null; 
      //DO WHAT YOU WANT WITH _data. The byte array of your image. 
     } catch (Exception E) { 

     } 
    } 
} 

नोट:

यहाँ यह से निपटने के लिए मेरे कोड है ।

0

आप putExtra(key,byte[]) उपयोग करें और अपनी Bitmap की bytes गुजरती हैं और फिर अपने onActivityResult उपयोग BitmapFactory.decodeByteArray() में Bitmap बनाने के लिए कर सकते हैं: यहाँ एक समारोह में समाधान है।

संपादित करें: आप अपने संसाधन/चित्र में Uri भी वापस कर सकते हैं।

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