image - 从图库选择图像,获取图像标识,将图像id传递到另一个 Activity 并加载图像到 imageview

  显示原文与译文双语对照的内容
0 0

就像标题所显示的那样。

这就是我要做

打开 Gallery ( 我知道该怎么做) Choose Choose Choose Choose Choose Choose Choose Choose Choose Choose Choose Choose Choose Choose Image Image Image Image Image pass pass pass pass ID ID load load 。

我知道我可以这样做


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

然后将 array 传递给 Intent


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

然后从Bundle获取字节 array 并转换成位图图像


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来提高内存和性能会更好,然后在下一个 Activity 中获取 ID,然后从SD卡加载镜像。

时间: 原作者:

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,像像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;

 }

 }
}

现在我们已经选择了图像的uri,这个方法可以获得它的路径,以便在包中传递下一个 Activity 。


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 中,从bundle加载路径,就像你用于字节 array 。 用那个路径用BitmapFactory解码


Bitmap bitmap = BitmapFactory.decodeFile(path);

我希望这对你的旅程有帮助,快乐的编码 !

编辑:另外的{ 如何从一个 Activity 发送imageview到其他,即使这看起来很像你不希望

原作者:
...