2012-10-04 19 views
5

में एक कस्टम फ़ोल्डर में फ़ाइल को कैसे सहेजने के लिए मैं एक मौजूदा कैमरा एप्लिकेशन से एक छवि को कैप्चर करने की कोशिश कर रहा हूं, छवि को एक अनुकूलित फ़ोल्डर में सहेजने और थंबनेल और छवि दृश्य में प्रदर्शित करने की कोशिश कर रहा हूं। कैमरा थंबनेल आपूर्ति रूप में लंबे समय के रूप में मैं निर्दिष्ट नहीं किया है जहां फ़ाइल को बचाने के लिए:छवि थंबनेल कैप्चर करने और एंड्रॉइड

मैं वापस आ इरादे से थंबनेल प्राप्त कर सकते हैं:

... 
    Intent i = = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    startActivityForResult(i) 
} 

protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    super.onActivityResult(requestCode, resultCode, intent);  
    Bundle extras = intent.getExtras(); 
    Bitmap mImageBitmap = (Bitmap) extras.get("data"); 
} 

या मैं एक निर्दिष्ट फ़ोल्डर में फ़ाइल को बचा सकता है (जो ठीक काम करता है)

... 
    Intent i = = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    i.putExtra((MediaStore.EXTRA_OUTPUT, outputFileUri); 
    startActivityForResult(i) 
} 

लेकिन थंबनेल नहीं रह गया है आशय अतिरिक्त "डाटा" में संग्रहित है, और जब मैं थंबनेल प्राप्त करने का प्रयास, मैं एक त्रुटि (यह मेरा LogCat से है)

मिल
10-04 06:30:14.463: E/AndroidRuntime(1967): Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null} to activity: java.lang.NullPointerException 

जैसा कि आप देख सकते हैं, वापस लौटाया गया फ़ील्ड बिटमैप थंबनेल के बजाय शून्य है। मैंने सीधे फ़ाइल से थंबनेल जेनरेट करने के लिए बिटमैप को डीकोड करने का प्रयास किया है, लेकिन यह बहुत लंबा लगता है (यहां तक ​​कि जब डाउनसमप्लेड मैं मेमोरी त्रुटि से बाहर हो जाता हूं), और यह नौकरी करने के लिए दो बार काम करने के लिए उलझन में लगता है। कोई सुझाव?

+0

मुझे लगता है कि [इस उत्तर] [1] फ़ाइल निर्देशिका specifing के लिए आप कर सकते हैं। [1]: उत्तर के लिए http://stackoverflow.com/a/9734268/1172945 – Tugrul

उत्तर

4

ठीक है के रूप में वहाँ छवि सेट कर सकते हैं। यदि आप इरादे के लिए आउटपुटयूआई पास कर रहे हैं तो आप एक्टिविटी रिसैट() पर इरादे से डेटा वापस प्राप्त नहीं कर पाएंगे।

मुझे लगता है कि एक ही विकल्प थंबनेल दिखाता है एक ही outputURI उपयोग करने के लिए है ..

इस प्रयास करें।

void captureImage(){ 
    File file = new File(Environment.getExternalStorageDirectory() 
    .getAbsolutePath() + "/MyFolder", "myImage"+ ".jpg"); 

mCapturedImagePath = file.getAbsolutePath(); 
     Uri outputFileUri = Uri.fromFile(file); 
    Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    i.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
    startActivityForResult(i, CAMERA_REQUEST); 

}

onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == CAMERA_REQUEST) { 
      if (resultCode == RESULT_OK) { 

File file = new File(mCapturedImagePath); 
imageView.setImageURI(Uri.fromFile(file)); 

} 
+0

आपके सुझाव के लिए धन्यवाद, लेकिन मैं उसी गतिविधि के भीतर लौटाए गए इरादे के परिणाम का परीक्षण कर रहा हूं (वास्तव में एक्टिविटी रिसेट में, वास्तव में)। यदि मैंने i.putExtra (MediaStore) दिया है तो कैमरा थंबनेल वापस नहीं करता है।EXTRA_OUTPUT, outputFileUri); – keighty

+0

मैंने इसे और अधिक स्पष्ट करने के लिए अपना प्रश्न संपादित किया है। – keighty

+0

camera_request एक पूर्णांक अनुरोध कोड है और इसे इच्छित कोई भी मूल्य दें। उदाहरण के लिए CAMERA_REQUEST = 1 –

0

आपका बिटमैप mImageBitmap एक स्थानीय चर रहा है, वैश्विक है कि आप onActivityResultFunction बाहर यह उपयोग करना चाहते हैं अन्यथा

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == CAMERA_REQUEST) { 
     photo = (Bitmap) data.getExtras().get("data"); 
     imageView.setImageBitmap(photo); 
    } 
} 
+0

धन्यवाद, लेकिन समस्या नहीं है कि मैं बिटमैप कहीं और उपयोग नहीं कर सकते, यह यह है कि कैमरा थंबनेल वापस नहीं करता है जब मैं इसे आउटपुट फ़ाइल नाम देता हूं – keighty

+0

इस आशय कैमराइन्टेंट = नया इरादा (android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult (कैमराइन्टेंट, CAMERA_REQUEST); –

+0

CAMERA_REQUEST कैमरा से एक पूर्णांक लौटाया गया है। कैमरे के आवेदन को दूसरे इरादे से क्यों शुरू करें जब यह अभी वापस आ गया है? – keighty

-1

कोशिश इस

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(cameraIntent, CAMERA_REQUEST);