保存图片到指定文件夹
Save picture in specified folder
我可以通过我的代码将图片保存在我想要的文件夹中,但这还不够好,因为我的代码在我的文件夹中提供了图像的副本,在画廊 (DCIM) 中提供了另一张图像的副本。
代码:
Btngetdata.setOnClickListener(new OnClickListener(){
public void onClick(View v){
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, 2);
}
});
public void onActivityResult(int requestCode, int resultCode, Intent data) {
File a = new File (Environment.getExternalStorageDirectory().getAbsolutePath() + "/splash/"+name+"/");
if (!a.exists()) {
a.mkdirs();
}
if (requestCode == 2) {
Bitmap photo = (Bitmap) data.getExtras().get("data");
ImageView test = (ImageView) findViewById(R.id.test);
test.setImageBitmap(photo);
try{
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
String currentDateandTime = sdf.format(new Date()).replace(" ","");
FileOutputStream out = new FileOutputStream(Environment.getExternalStorageDirectory().getAbsolutePath() + "/splash/"+name+"/"+currentDateandTime+".jpg");
photo.compress(Bitmap.CompressFormat.PNG, 100 , out);
out.flush();
out.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
我不能使用下面的代码或类似的东西。
Btngetdata.setOnClickListener(new OnClickListener(){
public void onClick(View v){
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
f = new File(Environment.getExternalStorageDirectory().getPath() + "/tmp/"+"tmp.png");
if (!f.exists()) {
f.mkdirs();
}
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
startActivityForResult(cameraIntent, 2);
}
});
下面都给我Logcat
04-17 20:41:24.974: E/AndroidRuntime(13913): FATAL EXCEPTION: main
04-17 20:41:24.974: E/AndroidRuntime(13913): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=2, result=0, data=null} to activity {com.example.sofrehkhane/com.sofrehKhane.slidingmenu.slidinglist.SingleItemView}: java.lang.NullPointerException
04-17 20:41:24.974: E/AndroidRuntime(13913): at android.app.ActivityThread.deliverResults(ActivityThread.java:3462)
04-17 20:41:24.974: E/AndroidRuntime(13913): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3505)
04-17 20:41:24.974: E/AndroidRuntime(13913): at android.app.ActivityThread.access00(ActivityThread.java:150)
04-17 20:41:24.974: E/AndroidRuntime(13913): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1346)
04-17 20:41:24.974: E/AndroidRuntime(13913): at android.os.Handler.dispatchMessage(Handler.java:99)
04-17 20:41:24.974: E/AndroidRuntime(13913): at android.os.Looper.loop(Looper.java:213)
04-17 20:41:24.974: E/AndroidRuntime(13913): at android.app.ActivityThread.main(ActivityThread.java:5225)
04-17 20:41:24.974: E/AndroidRuntime(13913): at java.lang.reflect.Method.invokeNative(Native Method)
04-17 20:41:24.974: E/AndroidRuntime(13913): at java.lang.reflect.Method.invoke(Method.java:525)
04-17 20:41:24.974: E/AndroidRuntime(13913): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
04-17 20:41:24.974: E/AndroidRuntime(13913): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
04-17 20:41:24.974: E/AndroidRuntime(13913): at dalvik.system.NativeStart.main(Native Method)
04-17 20:41:24.974: E/AndroidRuntime(13913): Caused by: java.lang.NullPointerException
04-17 20:41:24.974: E/AndroidRuntime(13913): at com.sofrehKhane.slidingmenu.slidinglist.SingleItemView.onActivityResult(SingleItemView.java:102)
04-17 20:41:24.974: E/AndroidRuntime(13913): at android.app.Activity.dispatchActivityResult(Activity.java:5322)
04-17 20:41:24.974: E/AndroidRuntime(13913): at android.app.ActivityThread.deliverResults(ActivityThread.java:3458)
04-17 20:41:24.974: E/AndroidRuntime(13913): ... 11 more
如果您能指导我解决问题,我会很高兴。
我想使用 "setOnClickListener(new OnClickListener(){" 按钮拍照并使用 "public void onActivityResult(int requestCode, int resultCode, Intent data) {" 保存拍摄的照片。
更新:
通过使用这个 link 我的应用获得了最佳答案和性能。
在行
Bitmap photo = (Bitmap) data.getExtras().get("data");
根据堆栈跟踪,data
是 null
。
您必须在那里检查 null
并采取相应措施。
另外,检查这个答案:
我可以通过我的代码将图片保存在我想要的文件夹中,但这还不够好,因为我的代码在我的文件夹中提供了图像的副本,在画廊 (DCIM) 中提供了另一张图像的副本。
代码:
Btngetdata.setOnClickListener(new OnClickListener(){
public void onClick(View v){
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, 2);
}
});
public void onActivityResult(int requestCode, int resultCode, Intent data) {
File a = new File (Environment.getExternalStorageDirectory().getAbsolutePath() + "/splash/"+name+"/");
if (!a.exists()) {
a.mkdirs();
}
if (requestCode == 2) {
Bitmap photo = (Bitmap) data.getExtras().get("data");
ImageView test = (ImageView) findViewById(R.id.test);
test.setImageBitmap(photo);
try{
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
String currentDateandTime = sdf.format(new Date()).replace(" ","");
FileOutputStream out = new FileOutputStream(Environment.getExternalStorageDirectory().getAbsolutePath() + "/splash/"+name+"/"+currentDateandTime+".jpg");
photo.compress(Bitmap.CompressFormat.PNG, 100 , out);
out.flush();
out.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
我不能使用下面的代码或类似的东西。
Btngetdata.setOnClickListener(new OnClickListener(){
public void onClick(View v){
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
f = new File(Environment.getExternalStorageDirectory().getPath() + "/tmp/"+"tmp.png");
if (!f.exists()) {
f.mkdirs();
}
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
startActivityForResult(cameraIntent, 2);
}
});
下面都给我Logcat
04-17 20:41:24.974: E/AndroidRuntime(13913): FATAL EXCEPTION: main
04-17 20:41:24.974: E/AndroidRuntime(13913): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=2, result=0, data=null} to activity {com.example.sofrehkhane/com.sofrehKhane.slidingmenu.slidinglist.SingleItemView}: java.lang.NullPointerException
04-17 20:41:24.974: E/AndroidRuntime(13913): at android.app.ActivityThread.deliverResults(ActivityThread.java:3462)
04-17 20:41:24.974: E/AndroidRuntime(13913): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3505)
04-17 20:41:24.974: E/AndroidRuntime(13913): at android.app.ActivityThread.access00(ActivityThread.java:150)
04-17 20:41:24.974: E/AndroidRuntime(13913): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1346)
04-17 20:41:24.974: E/AndroidRuntime(13913): at android.os.Handler.dispatchMessage(Handler.java:99)
04-17 20:41:24.974: E/AndroidRuntime(13913): at android.os.Looper.loop(Looper.java:213)
04-17 20:41:24.974: E/AndroidRuntime(13913): at android.app.ActivityThread.main(ActivityThread.java:5225)
04-17 20:41:24.974: E/AndroidRuntime(13913): at java.lang.reflect.Method.invokeNative(Native Method)
04-17 20:41:24.974: E/AndroidRuntime(13913): at java.lang.reflect.Method.invoke(Method.java:525)
04-17 20:41:24.974: E/AndroidRuntime(13913): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
04-17 20:41:24.974: E/AndroidRuntime(13913): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
04-17 20:41:24.974: E/AndroidRuntime(13913): at dalvik.system.NativeStart.main(Native Method)
04-17 20:41:24.974: E/AndroidRuntime(13913): Caused by: java.lang.NullPointerException
04-17 20:41:24.974: E/AndroidRuntime(13913): at com.sofrehKhane.slidingmenu.slidinglist.SingleItemView.onActivityResult(SingleItemView.java:102)
04-17 20:41:24.974: E/AndroidRuntime(13913): at android.app.Activity.dispatchActivityResult(Activity.java:5322)
04-17 20:41:24.974: E/AndroidRuntime(13913): at android.app.ActivityThread.deliverResults(ActivityThread.java:3458)
04-17 20:41:24.974: E/AndroidRuntime(13913): ... 11 more
如果您能指导我解决问题,我会很高兴。
我想使用 "setOnClickListener(new OnClickListener(){" 按钮拍照并使用 "public void onActivityResult(int requestCode, int resultCode, Intent data) {" 保存拍摄的照片。
更新: 通过使用这个 link 我的应用获得了最佳答案和性能。
在行
Bitmap photo = (Bitmap) data.getExtras().get("data");
根据堆栈跟踪,data
是 null
。
您必须在那里检查 null
并采取相应措施。
另外,检查这个答案: