【问题标题】:Passing of captured image or from gallery to another activity将捕获的图像或从画廊传递到另一个活动
【发布时间】:2019-04-20 13:30:49
【问题描述】:

我一直在尝试将来自gallery 或camera 的图像传递给另一个活动,但它们无法正常工作。如果图库中的图像可以工作,那么相机中的图像将无法工作,反之亦然。请帮我修复我的代码。这是我的 MainActivity 和 SecondActivity 的代码。谢谢!

MainActivity.java

public class MainActivity extends AppCompatActivity {

Button btnStart,btnGallery,btnAbout;
ImageView reademlogo, pianotiles,imgclouds,imgclouds2,imgsharp,imgfclef;
TextView txtread;
Typeface tf1;
private final int REQUEST_IMAGE_CAPTURE = 1;
private final int PICK_IMAGE = 1;
Uri imageUri;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    UserInterface();
}

 private void UserInterface() {
    btnStart = (Button)findViewById(R.id.btnStart);
    btnGallery = (Button)findViewById(R.id.btnGallery);
    btnAbout = (Button)findViewById(R.id.btnAbout);
    reademlogo = (ImageView)findViewById(R.id.reademLogo);
    pianotiles = (ImageView)findViewById(R.id.pianotiles);
    imgclouds = (ImageView)findViewById(R.id.imgclouds);
    imgclouds2 = (ImageView)findViewById(R.id.imgclouds2);
    imgsharp = (ImageView)findViewById(R.id.imgsharp);
    imgfclef = (ImageView)findViewById(R.id.imgfclef);

    txtread = (TextView)findViewById(R.id.txtread);

    tf1 = Typeface.createFromAsset(getAssets(),
          "fonts/VeganStylPersonalUse.ttf");
    txtread.setTypeface(tf1);
 }

 public void captureImage(View view) {
    Intent iCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (iCamera.resolveActivity(getPackageManager()) != null) {
         startActivityForResult(iCamera, REQUEST_IMAGE_CAPTURE);
     }
 }

 public void galImage(View view) {
    Intent iGallery = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.INTERNAL_CONTENT_URI);
    iGallery.setType("image/*");
    startActivityForResult(iGallery, PICK_IMAGE);
 }

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

    if(resultCode == RESULT_OK && requestCode == REQUEST_IMAGE_CAPTURE){

        Bitmap bitmap = (Bitmap)Objects.requireNonNull(data.getExtras()).get("data");
        Intent intent = new Intent(MainActivity.this,Camera.class);
        intent.putExtra("Bitmap",bitmap);
        startActivity(intent);
    }
    else if(requestCode == PICK_IMAGE){
        if(data != null){
            imageUri = data.getData();
            Intent intent = new Intent(MainActivity.this,Camera.class);
            intent.putExtra("imageUri",imageUri);
            startActivity(intent);
        }
     }
   }
}

Camera.java

public class Camera extends AppCompatActivity {

Button btnCap, btnUse;
ImageView imageView3;
Uri imageUri;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_camera);

    btnCap = (Button) findViewById(R.id.btnCap);
    btnUse = (Button) findViewById(R.id.btnUse);
    imageView3 = (ImageView) findViewById(R.id.imageView3);

    if (getIntent().getExtras() != null) {
        imageUri = Uri.parse(getIntent().getStringExtra("imageUri"));
        imageView3.setImageURI(imageUri);
       }

    Intent intentCam = getIntent();
    Bitmap camera_img = (Bitmap)intentCam.getParcelableExtra("Bitmap");
    if(camera_img != null){
        imageView3.setImageBitmap(camera_img);
     } 
  }
}

【问题讨论】:

  • 你能添加两个活动的完整代码吗?
  • @SandeepInsan 这里是更新的代码。请帮忙谢谢!
  • 您将图像保存在图库中的哪个位置并在 imageView 中设置?

标签: android android-intent bitmap uri gallery


【解决方案1】:

试试这个对我来说很好用。

 //Use  this method to select image from Gallery
 private void processGalleryImage() {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select Picture"),
            GALLERY_REQUEST_CODE);
}

//Use  this method to click image from Camera
private void processCameraImage() {
    Intent cameraIntent = new 
    Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(cameraIntent, CAMERA_REQUEST_CODE);
}



 //Use  this method to get image from Gallery/Captured from Camera
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == Activity.RESULT_OK) {
        if (requestCode == CAMERA_REQUEST_CODE) {
            Bitmap photo = (Bitmap) data.getExtras().get("data");

            //Starting activity (ImageViewActivity in my code) to preview image 
            Intent intent = new Intent(this, ImageViewActivity.class);
            intent.putExtra("BitmapImage", photo);
            startActivity(intent);
        } else if (requestCode == GALLERY_REQUEST_CODE) {
            if (data.getData() != null) {
                Uri imageUri = data.getData();

                //Starting activity (ImageViewActivity in my code) to preview image 
                Intent intent = new Intent(this, ImageViewActivity.class);
                intent.putExtra("ImageUri", imageUri.toString());
                startActivity(intent);
            }
        }
    }
}


 //ImageViewActivity code

 private Bitmap bitmap;
 private String uri;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_image_view);
    ButterKnife.bind(this);


    Bundle bundle = getIntent().getExtras();
    if (bundle != null) {
        bitmap = bundle.getParcelable("BitmapImage");
        uri = bundle.getString("ImageUri");

        if (bitmap != null)
            imageView.setImageBitmap(bitmap);
        else
            Glide.with(this).load(uri).into(imageView);
    }
}

如果我有图像 url,我正在使用 Glide 库在图像视图中加载图像。

【讨论】:

  • 还是有问题。我通过停留在一项活动而不通过它来更改显示图像的过程。但是我现在的问题是我无法将它保存在我的画廊中,即使我在 stackoverflow 中尝试了其他代码。有什么帮助吗?谢谢!
  • 检查一下如果仍然遇到问题让我知道stackoverflow.com/questions/6027720/…
  • 已将其保存在图库中,但现在我无法在同一活动的 imageview 上显示捕获的图像,为什么会这样? :(
  • 它也没有在我的 logcat 上显示任何错误。有可能两者都做吗?保存图像然后在 imageview 上显示?
  • 嗨,Sandeep,我可以把这个发到你的邮箱吗?以便我可以进一步寻求帮助?谢谢?
猜你喜欢
  • 1970-01-01
  • 2012-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-06
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
相关资源
最近更新 更多