2015-04-22 77 views
4

我要求通过代码的访问画廊作为一名倾听这里的用户:的Android:如何从图库中选择的照片设置为位图

Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); 
photoPickerIntent.setType("image/*"); 
startActivityForResult(photoPickerIntent, SELECT_PHOTO); 

不过,我很困惑,如何我会为选定的照片设置一个变量。

我将代码设置为选择照片的变量的位置?

谢谢:)

+0

你能得到图像路径吗? –

回答

8

你可以这样做。

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

    // Here we need to check if the activity that was triggers was the Image Gallery. 
    // If it is the requestCode will match the LOAD_IMAGE_RESULTS value. 
    // If the resultCode is RESULT_OK and there is some data we know that an image was picked. 
    if (requestCode == LOAD_IMAGE_RESULTS && resultCode == RESULT_OK && data != null) { 
     // Let's read picked image data - its URI 
     Uri pickedImage = data.getData(); 
     // Let's read picked image path using content resolver 
     String[] filePath = { MediaStore.Images.Media.DATA }; 
     Cursor cursor = getContentResolver().query(pickedImage, filePath, null, null, null); 
     cursor.moveToFirst(); 
     String imagePath = cursor.getString(cursor.getColumnIndex(filePath[0])); 

     BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
     Bitmap bitmap = BitmapFactory.decodeFile(imagePath, options); 

     // Do something with the bitmap 


     // At the end remember to close the cursor or you will end with the RuntimeException! 
     cursor.close(); 
    } 
} 
+0

但我应该把这个放在哪里?只是在onCreate或我应该把它放在听众的按钮来选择它? – Kinoscorpia

+0

查看编辑:) –

+0

如果我想保存它创建的bitmp,我可以在类的开始创建一个变量称为位图,然后只是说“位图= BitmapFactory.decodeFile(imagePath,选项);”? – Kinoscorpia

9

首先,你必须覆盖onActivityResult来获取文件所选图像

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    if (requestCode == SELECT_PHOTO) { 

     if (resultCode == RESULT_OK) { 
      if (intent != null) { 
       // Get the URI of the selected file 
       final Uri uri = intent.getData(); 
       useImage(uri);     
       } 
     } 
     super.onActivityResult(requestCode, resultCode, intent); 

    } 
} 

的URI然后定义useImage(Uri)使用的图像

void useImage(Uri uri) 
{ 
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri); 
//use the bitmap as you like 
imageView.setImageBitmap(bitmap); 
} 
1

如果你想显示的选择图像到任何特定的ImageView。 假设我们有RC_PHOTO_PICKER = 1,则这些代码行应该做的魔术

private void openPhotoPicker() { 
    Intent photoPickerIntent = new Intent(Intent.ACTION_GET_CONTENT); 
    photoPickerIntent.setType("image/*"); 
    photoPickerIntent.putExtra(Intent.EXTRA_LOCAL_ONLY, false); 
    startActivityForResult(Intent.createChooser(photoPickerIntent,"Complete Action Using"), RC_PHOTO_PICKER); 
} 

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

    if (requestCode == RC_PHOTO_PICKER && resultCode == RESULT_OK && data != null) { 
     Uri pickedImage = data.getData(); 
     //set the selected image to ImageView 
     mImageView.setImageURI(pickedImage); 
    } 
} 

而且只需调用openPhotoPicker()方法之后

1

替代的阿卡什Kurian说何塞答案

Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri); 

我始终使用

fun getBitmap(file: Uri, cr: ContentResolver): Bitmap?{ 
      var bitmap: Bitmap ?= null 
      try { 
       val inputStream = cr.openInputStream(file) 
       bitmap = BitmapFactory.decodeStream(inputStream) 
       // close stream 
       try { 
        inputStream.close() 
       } catch (e: IOException) { 
        e.printStackTrace() 
       } 

      }catch (e: FileNotFoundException){} 
      return bitmap 
     } 

它同时适用从画廊的照片和照相机的照片。

更大的问题:使用这种方法Picasso unable to display image from Gallery

开画廊:

private void openGallery(){ 
    if (Build.VERSION.SDK_INT <19){ 
     Intent intent = new Intent(); 
     intent.setType("image/*"); 
     intent.setAction(Intent.ACTION_GET_CONTENT); 
     startActivityForResult(Intent.createChooser(intent, getResources().getString(R.string.select_picture)),GALLERY_INTENT_CALLED); 
    } else { 
     Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); 
     intent.addCategory(Intent.CATEGORY_OPENABLE); 
     intent.setType("image/*"); 
     startActivityForResult(intent, GALLERY_KITKAT_INTENT_CALLED); 
    } 
} 

那你就能够读取转换乌里位图使用afromentioned ContentResolver.openInputStream或设置图片ImageView.setImageUri(Uri)

相关问题