我是Android应用程序开发的新手。我正试图用Intents拍照。一切都很好,我可以拍照并将其保存到外部存储,但我无法得到保存的地方。 这是我的onCreate方法:
private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
public static final int MEDIA_TYPE_IMAGE = 1;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Uri fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
}
在这里,我创建了保存图像的路径:
private static Uri getOutputMediaFileUri(int type){
return Uri.fromFile(getOutputMediaFile(type));
}
private static File getOutputMediaFile(int type){
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "MyCameraApp");
if (! mediaStorageDir.exists()){
if (! mediaStorageDir.mkdirs()){
Log.d("MyCameraApp", "failed to create directory");
return null;
}
}
// Create a media file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
File mediaFile;
if (type == MEDIA_TYPE_IMAGE){
mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"IMG_"+ timeStamp + ".jpg");
} else {
return null;
}
return mediaFile;
}
图像保存在指定的路径中,但onActivityResult
中的数据为空,我无法获取路径:
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if( requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE )
{
if( resultCode == RESULT_OK ){
Toast.makeText(this, "Video saved to:\n" +data.getData(), Toast.LENGTH_LONG).show();
}
}
}
答案 0 :(得分:1)
使用此功能单击图像
public void takePhoto1() {
if (!android.os.Environment.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED)) {
Toast.makeText(Add_View_Images_Activity.this,
"Please insert SDcard for capturing photo.",
Toast.LENGTH_SHORT).show();
} else {
try {
photo1=new File(fWrapper.path+"/"+System.currentTimeMillis()+".jpg");
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo1));
cameraIntent.putExtra("return-data", true);
startActivityForResult(cameraIntent, 4);
} catch (Exception e) {
Toast.makeText(Add_View_Images_Activity.this, ""+e, Toast.LENGTH_LONG).show();
}
}
}
此功能可将图像保存在指定位置。 现在,您可以从onActivityResult中文件photo1的路径获取所单击图像的路径。
像这样String path=photo1.getAbsolutePath();
现在只需通过您正在使用此功能的路径,它一直100%工作。
public Bitmap getImage(String path) throws IOException
{
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(path, options);
int srcWidth = options.outWidth;
int srcHeight = options.outHeight;
int[] newWH = new int[2];
newWH[0] = srcWidth/2;
newWH[1] = (newWH[0]*srcHeight)/srcWidth;
int inSampleSize = 1;
while(srcWidth / 2 >= newWH[0]){
srcWidth /= 2;
srcHeight /= 2;
inSampleSize *= 2;
}
// float desiredScale = (float) newWH[0] / srcWidth;
// Decode with inSampleSize
options.inJustDecodeBounds = false;
options.inDither = false;
options.inSampleSize = inSampleSize;
options.inScaled = false;
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap sampledSrcBitmap = BitmapFactory.decodeFile(path,options);
ExifInterface exif = new ExifInterface(path);
String s=exif.getAttribute(ExifInterface.TAG_ORIENTATION);
System.out.println("Orientation>>>>>>>>>>>>>>>>>>>>"+s);
Matrix matrix = new Matrix();
float rotation = rotationForImage(Add_View_Images_Activity.this, Uri.fromFile(new File(path)));
if (rotation != 0f) {
matrix.preRotate(rotation);
}
int newh = ( w * sampledSrcBitmap.getHeight() ) /sampledSrcBitmap.getWidth();
Bitmap r=Bitmap.createScaledBitmap(sampledSrcBitmap, w, newh, true);
Bitmap resizedBitmap = Bitmap.createBitmap(
r, 0, 0, w, newh, matrix, true);
return resizedBitmap;
}