Android 从照相机捕获照片并在另一活动的图像视图中显示

Android 从照相机捕获照片并在另一活动的图像视图中显示,android,bitmap,android-bitmap,Android,Bitmap,Android Bitmap,我想在“图像视图”中的另一个活动上显示从相机捕获的照片。但它必须是全质量的。请告诉我怎么做。这是我的代码: 主课 private static final int REQUEST_CAMERA = 1888; Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent,REQUEST_CAMERA); protected void onA

我想在“图像视图”中的另一个活动上显示从相机捕获的照片。但它必须是全质量的。请告诉我怎么做。这是我的代码:

主课

 private static final int REQUEST_CAMERA = 1888;
 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(intent,REQUEST_CAMERA);
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
     if (requestCode == REQUEST_CAMERA)
            {
               Uri returnUri = data.getData();
                try {
                    Bitmap bitmapImage = MediaStore.Images.Media.getBitmap(MainActivity.this.getContentResolver(),returnUri);
                    Intent i = new Intent(this,ShowCameraPhotoActivity.class);
                    i.putExtra("image",bitmapImage);
                    startActivity(i);
                } catch (IOException e) {
                    e.printStackTrace();
                }


            }
           }

                }
ShowPhotoCameraActivity.class:

  ImageView showPhoto = (Imageview) findViewById(R.id.image);
   Bitmap bitmap = (Bitmap) this.getIntent().getParcelableExtra("image");
   if (showPhoto != null) {
        showPhoto.setImageBitmap(bitmap);
    }
Utils类

 public static File getOutputMediaFile(int type) {
    File mediaStorageDir = new File(
            Environment
                    .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
            Config.IMAGE_DIRECTORY_NAME);

    if (!mediaStorageDir.exists()) {
        if (!mediaStorageDir.mkdirs()) {
            Log.d(Config.IMAGE_DIRECTORY_NAME, "Oops! Failed create "
                    + Config.IMAGE_DIRECTORY_NAME + " directory");
            return null;
        }
    }

    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",
            Locale.getDefault()).format(new Date());
    File mediaFile;
    if (type == Config.MEDIA_TYPE_IMAGE) {
        mediaFile = new File(mediaStorageDir.getPath() + File.separator
                + "IMG_" + timeStamp + ".jpg");
    }  else {
        return null;
    }

    return mediaFile;
}


public static  File persistImage(Bitmap bitmap, String name) {
    File filesDir = AppSingleton.getContext().getFilesDir();
    File imageFile = new File(filesDir, name + ".png");

    OutputStream os;
    try {
        os = new FileOutputStream(imageFile);
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, os);
        os.flush();
        os.close();
    } catch (Exception e) {
        Log.e(AppSingleton.getContext().getClass().getSimpleName(), "Error writing bitmap", e);
    }
    return imageFile;
}



public static Uri getOutputMediaFileUri(int type) {
    return Uri.fromFile(getOutputMediaFile(type));
}
主要活动

    private static final int PICK_IMAGE_REQUEST = 2;
    private static final int CAMERA_CAPTURE_IMAGE_REQUEST_CODE = 100;

    private Uri fileUri;
    Bitmap bitmap2;


 /**
 * Cature image
 */
private void captureImage() {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    fileUri = Utils.getOutputMediaFileUri(Config.MEDIA_TYPE_IMAGE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
    startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE);
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            String imagePath = getImagePath(data.getData());
            if (imagePath != null) {
                Intent intent = new Intent(this, PreviewActivity.class);
                intent.putExtra(IMAGE_PATH, imagePath);
                startActivity(intent);
            }
        }
    }
}
第二项活动

在onCreate()中

Utils类

 public static File getOutputMediaFile(int type) {
    File mediaStorageDir = new File(
            Environment
                    .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
            Config.IMAGE_DIRECTORY_NAME);

    if (!mediaStorageDir.exists()) {
        if (!mediaStorageDir.mkdirs()) {
            Log.d(Config.IMAGE_DIRECTORY_NAME, "Oops! Failed create "
                    + Config.IMAGE_DIRECTORY_NAME + " directory");
            return null;
        }
    }

    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",
            Locale.getDefault()).format(new Date());
    File mediaFile;
    if (type == Config.MEDIA_TYPE_IMAGE) {
        mediaFile = new File(mediaStorageDir.getPath() + File.separator
                + "IMG_" + timeStamp + ".jpg");
    }  else {
        return null;
    }

    return mediaFile;
}


public static  File persistImage(Bitmap bitmap, String name) {
    File filesDir = AppSingleton.getContext().getFilesDir();
    File imageFile = new File(filesDir, name + ".png");

    OutputStream os;
    try {
        os = new FileOutputStream(imageFile);
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, os);
        os.flush();
        os.close();
    } catch (Exception e) {
        Log.e(AppSingleton.getContext().getClass().getSimpleName(), "Error writing bitmap", e);
    }
    return imageFile;
}



public static Uri getOutputMediaFileUri(int type) {
    return Uri.fromFile(getOutputMediaFile(type));
}
主要活动

    private static final int PICK_IMAGE_REQUEST = 2;
    private static final int CAMERA_CAPTURE_IMAGE_REQUEST_CODE = 100;

    private Uri fileUri;
    Bitmap bitmap2;


 /**
 * Cature image
 */
private void captureImage() {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    fileUri = Utils.getOutputMediaFileUri(Config.MEDIA_TYPE_IMAGE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
    startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE);
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            String imagePath = getImagePath(data.getData());
            if (imagePath != null) {
                Intent intent = new Intent(this, PreviewActivity.class);
                intent.putExtra(IMAGE_PATH, imagePath);
                startActivity(intent);
            }
        }
    }
}
第二项活动

在onCreate()中


你可以这样做。用于打开相机

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 0);
拍照后,您可以这样在onActivityResult()方法中收集数据

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    String filePath;
    Bitmap bitmap = null;
  if (requestCode == REQUEST_FROM_CAMERA && resultCode == RESULT_OK) {

    bitmap = (Bitmap) data.getExtras().get("data");

  Intent intent = new Intent(anotherActivity.class)
  intent.putExtra(Intent.EXTRA_STREAM, Uri.parse ("file://" + filePath));
  startActivity(intent);
 }
然后新的活动就是这样做的

Intent intent = getIntent();
Uri uri = (Uri) intent.getExtras().get(Intent.EXTRA_STREAM);
imageView.setImageURI(imgUri);

你可以这样做。用于打开相机

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 0);
拍照后,您可以这样在onActivityResult()方法中收集数据

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    String filePath;
    Bitmap bitmap = null;
  if (requestCode == REQUEST_FROM_CAMERA && resultCode == RESULT_OK) {

    bitmap = (Bitmap) data.getExtras().get("data");

  Intent intent = new Intent(anotherActivity.class)
  intent.putExtra(Intent.EXTRA_STREAM, Uri.parse ("file://" + filePath));
  startActivity(intent);
 }
然后新的活动就是这样做的

Intent intent = getIntent();
Uri uri = (Uri) intent.getExtras().get(Intent.EXTRA_STREAM);
imageView.setImageURI(imgUri);

您的答案不一致,导致崩溃

全局变量:
private static final int REQUEST\u CAMERA=1888

调用照相机的函数:

      private void camera(){
      Intent intent = (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT)
                    ? new Intent(MediaStore.ACTION_IMAGE_CAPTURE_SECURE)
                    : new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
      startActivityForResult(intent,REQUEST_CAMERA);
      }
另一种
@Override
方法用于对ActivityResult进行结果处理

      @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      if (resultCode == RESULT_OK) {
      if (requestCode == REQUEST_CAMERA)
        {
            try {
                Bitmap bitmapImage = (Bitmap)data.getExtra("data");

                Intent i = new Intent(this,ShowCameraPhotoActivity.class);
                i.putExtra("image",bitmapImage);
                startActivity(i);
                } catch (IOException e) {
                e.printStackTrace();
                }
        }
       }
      }
必须在
Manifest.xml

<uses-permission android:name="android.permission.CAMERA"/>

您的答案不一致,导致崩溃

全局变量:
private static final int REQUEST\u CAMERA=1888

调用照相机的函数:

      private void camera(){
      Intent intent = (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT)
                    ? new Intent(MediaStore.ACTION_IMAGE_CAPTURE_SECURE)
                    : new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
      startActivityForResult(intent,REQUEST_CAMERA);
      }
另一种
@Override
方法用于对ActivityResult进行结果处理

      @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      if (resultCode == RESULT_OK) {
      if (requestCode == REQUEST_CAMERA)
        {
            try {
                Bitmap bitmapImage = (Bitmap)data.getExtra("data");

                Intent i = new Intent(this,ShowCameraPhotoActivity.class);
                i.putExtra("image",bitmapImage);
                startActivity(i);
                } catch (IOException e) {
                e.printStackTrace();
                }
        }
       }
      }
必须在
Manifest.xml

<uses-permission android:name="android.permission.CAMERA"/>

您可以使用firebase存储图像,并使用图像url在您选择的任何活动中加载图像 我在我的应用程序中使用了这个tut 您可以使用毕加索或glide库加载图像

 private DatabaseReference reference;
 private ImageView image_profile;

image_profile = (ImageView) findViewById(R.id.image_profile);
        reference = FirebaseDatabase.getInstance().getReference();

        Query query = reference.child("Pictures");

        query.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                String url = snapshot.child("imageurl").getValue().toString();

                if (!url.isEmpty())
                {
                    Picasso.get()
                            .load(url)
                            .into(image_profile);
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });

您可以使用firebase存储图像,并使用图像url在您选择的任何活动中加载图像 我在我的应用程序中使用了这个tut 您可以使用毕加索或glide库加载图像

 private DatabaseReference reference;
 private ImageView image_profile;

image_profile = (ImageView) findViewById(R.id.image_profile);
        reference = FirebaseDatabase.getInstance().getReference();

        Query query = reference.child("Pictures");

        query.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                String url = snapshot.child("imageurl").getValue().toString();

                if (!url.isEmpty())
                {
                    Picasso.get()
                            .load(url)
                            .into(image_profile);
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });


@G.Al使用上下文创建singleton类或将这些方法移动到您的活动中对不起,前面没有提到,但在IMAGE\u DiRECTORY\u NAME和MEDIA\u TYPE中也会出现错误_IMAGE@G.Al公共静态最终int媒体类型图像=1;公共静态最终字符串IMAGE\u DIRECTORY\u NAME=“OwoCar”;定义这些变量我不知道。它不起作用,有很多错误。也许你有一个更简单的解决方案。@G.Al如果你以前找不到解决方案,我会稍后回答你。实际上,这是工作代码,只是类的一些问题think@G.Al使用上下文创建singleton类,或者将这些方法移动到您的活动中对不起,前面没有提到,但是它在IMAGE\u目录\u NAME和MEDIA\u TYPE中也给了我一个错误_IMAGE@G.Al公共静态最终int媒体类型图像=1;公共静态最终字符串IMAGE\u DIRECTORY\u NAME=“OwoCar”;定义这些变量我不知道。它不起作用,有很多错误。也许你有一个更简单的解决方案。@G.Al如果你以前找不到解决方案,我会稍后回答你。实际上这是工作代码只是类分布的一些问题我想你能解释一下MediaStore.Images.Media.GetBitBitmap(这个,…)吗它显示了一个错误使用这个
位图bitmapImage=MediaStore.Images.Media.GetBitBitmap(MainActivity.this.getContentResolver(),returnUri)@G.Al添加try-catch块并运行,发生这种情况是因为它可能会在某个时间引发异常。因此,在代码周围添加try-catch块(单击红色灯泡它会自动添加;))是是。。在我发表评论10秒钟后,我发现了这一点:P。但它再次显示了一个错误。。我尝试了一切:/原因是:java.lang.RuntimeException:未能将结果ResultInfo{who=null,request=1,result=-1,data=Intent{act=inline data(has extras)}}传递到活动{com.example.ga.photoeditor/com.example.ga.photoeditor.MainActivity}:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String android.net.Uri.getScheme()”,请再次发布您的代码,因为我将在此处编译并告知您。更新有问题的代码您能给我解释一下MediaStore.Images.Media.GetBitBitmap(此…)吗?它向我显示了一个错误使用此
位图bitmapImage=MediaStore.Images.Media.GetBitBitmap(MainActivity.this.getContentResolver(),returnUri)@G.Al添加try-catch块并运行,发生这种情况是因为它可能会在某个时间引发异常。因此,在代码周围添加try-catch块(单击红色灯泡它会自动添加;))是是。。在我发表评论10秒钟后,我发现了这一点:P。但它再次显示了一个错误。。我尝试了一切:/原因是:java.lang.RuntimeException:未能将结果ResultInfo{who=null,request=1,result=-1,data=Intent{act=inline data(has extras)}}传递到活动{com.example.ga.photoeditor/com.example.ga.photoeditor.MainActivity}:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String android.net.Uri.getScheme()”,请再次发布您的代码,因为我将在此处编译并告知您。在questionValue文件路径中更新代码始终为空!!什么是“imgUri”?我用uri替换了imgUri!!但它再次向我显示了一个由以下原因引起的错误:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String android.net.Uri.getScheme()”。值filePath始终为空!!什么是“imgUri”?我用uri替换了imgUri!!但它再次向我显示了一个由以下原因引起的错误:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String android.net.Uri.getScheme()”