是否有可能做到这一点?从选择图像到捕获图像

时间:2018-07-05 07:40:30

标签: android android-camera android-camera-intent android-camera2

是否可以在不保存电话的情况下捕获图像并将其显示在imageview上?最好是从API级别18开始工作。目前,我的代码是

private void ImageSelection()
{
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(intent, IMAGE_REQUEST);

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == IMAGE_REQUEST && resultCode == RESULT_OK && data != null)
    {
        Uri FilePath = data.getData();
        try {

            bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), FilePath);
            mImageView.setImageBitmap(bitmap);
            mImageView.setVisibility(View.VISIBLE);
            mEditText.setVisibility(View.VISIBLE);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
        if (TextUtils.isEmpty(mEditText.getText())){
            mEditText.setError("Must!");
        }

}

1 个答案:

答案 0 :(得分:1)

使用相机应用拍照

将操作委派给其他应用程序的Android方法是调用描述您要完成的操作的Intent。此过程涉及三部分:

  1. 意图本身
  2. 启动外部活动的电话
  3. 当焦点返回到您的活动时一些用于处理图像数据的代码

这是一个调用意图以捕获照片的功能。

static final int REQUEST_IMAGE_CAPTURE = 1;

private void dispatchTakePictureIntent() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    }
}

请注意,startActivityForResult()方法受到调用resolveActivity()的条件的保护,该条件返回可以处理该意图的第一个活动组件。执行此检查非常重要,因为如果您使用没有应用程序可以处理的意图调用startActivityForResult(),则您的应用程序将崩溃。因此,只要结果不为null,就可以安全地使用意图。

获取缩略图

如果简单的拍照技艺不是您应用程序雄心壮志的最终结果,那么您可能希望从相机应用程序中获取图像并对其进行处理。

Android Camera应用程序将传递给onActivityResult()的返回Intent中的照片编码为附加内容中的小Bitmap,位于键“数据”下。以下代码检索此图像并将其显示在ImageView中。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        Bundle extras = data.getExtras();
        Bitmap imageBitmap = (Bitmap) extras.get("data");
        mImageView.setImageBitmap(imageBitmap);
    }
}

Check official documentation以获得更好的理解。

希望这会有所帮助。