Android从图库中选择图像,获取图像ID,将图像ID传递给另一个活动并将图像加载到imageview

时间:2014-10-13 00:16:19

标签: android image android-intent bitmap android-gallery

正如标题几乎所说的那样。

这是我想要做的事情

1)打开图库(我知道怎么做) 2)从图库中选择图像 3)获取图像ID并将ID传递给另一个活动 4)在这个其他活动中,我想将此图像加载到ImageView中。

我知道我可以这样做

Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();

然后将数组传递给intent

Intent intent = new Intent(this, NextActivity.class);
intent.putExtra("picture", byteArray);
startActivity(intent);

然后从Bundle获取字节数组并转换为位图图像

Bundle extras = getIntent().getExtras();
byte[] byteArray = extras.getByteArray("picture");

Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
ImageView image = (ImageView) findViewById(R.id.imageView1);

image.setImageBitmap(bmp);

但我相信通过传递ID然后在下一个活动中获取id并从SD卡加载图像,内存和性能会更好。

1 个答案:

答案 0 :(得分:0)

我从一个我正在研究的项目中获得了一些代码片段。也许这会有所帮助: (对不起,如果有些代码无关紧要,正如我在我的一个旧项目中所说的那样)

首先,当然,找到图片

 Intent intent = new Intent();
            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(
                    Intent.createChooser(intent, "Select Picture"),
                    SELECT_PICTURE);

当用户选择图片时,将调用onActivityResult并将用户带回到之前的Activity(大部分时间都是在Activity中启动)。在这里,我们可以获得一些我们可以传递到下一个Activity的数据,例如图像URI。

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {

        switch (requestCode) {

        case SELECT_PICTURE:
            // Uri selectedImageUri;
            selectedImageUri = data.getData();

            if (pic.getDrawingCache() != null) {
                pic.destroyDrawingCache();
            }

            pic.setImageURI(selectedImageUri);
            pic.buildDrawingCache(true);
            pic.setDrawingCacheQuality(ImageView.DRAWING_CACHE_QUALITY_HIGH);
            pic.setMaxHeight(pic.getDrawable().getBounds().width());

            tvPicInfo
                    .setText(String.valueOf(pic.getDrawable().getBounds()
                            .width())
                            + "px"
                            + " x "
                            + String.valueOf(pic.getDrawable().getBounds()
                                    .height()) + "px");

            break;

        case 2:

            selectedImageUri = data.getData();

            if (pic.getDrawingCache() != null) {
                pic.destroyDrawingCache();
            }

            pic.setImageURI(selectedImageUri);
            pic.buildDrawingCache(true);
            pic.setDrawingCacheQuality(ImageView.DRAWING_CACHE_QUALITY_HIGH);
            break;

        }

    }
}

现在我们已经选择了图像,这个方法可以获得它的路径,你可以将它传递给bundle中的下一个活动。

public String getPath(Uri uri) {
    String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(uri, projection, null, null, null);
    int column_index = cursor
            .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}

在下一个Activity中,从包中加载路径,就像您对字节数组一样。使用该路径,使用BitmapFactory

进行解码
Bitmap bitmap = BitmapFactory.decodeFile(path);

我希望这可以帮助您完成旅程,快乐编码!

编辑:Else { how to send imageview from one activity to other  即使这看起来很像你不想要的