2017-11-09 5 views
0

私はAndroidには新しく、画像URIからビットマップに変換する際に問題が発生していますが、画像ビューで表示するにはまだ未処理の例外が発生していますビットマップは、ここにコードです:Image Uriをギャラリーからビットマップに変換する問題

public class MainActivity extends AppCompatActivity { 
public static final int PICK_IMAGE = 1; 
Image picture = new Image(); 
Context context = getApplicationContext(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Button btnGallery = (Button) findViewById(R.id.btnGallery); 
    final ImageView imageView = (ImageView) findViewById(R.id.imageView); 

    btnGallery.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(); 
      intent.setType("image/*"); 
      intent.setAction(Intent.ACTION_GET_CONTENT); 
      startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE); 
      Uri imageUri = intent.getData(); 
      Bitmap bitmap= MediaStore.Images.Media.getBitmap(context.getContentResolver(), imageUri); 
      imageView.setImageBitmap(bitmap); 
     }}); 

任意の提案?ありがとうございました!

+0

どのような例外がありますか? – Yupi

答えて

0

あなたは正しい方法で画像を選んでいません。あなたの(おそらく)ActivityオーバーライドonActivityResultに続いて

Uri imageUri = intent.getData(); 
     Bitmap bitmap= MediaStore.Images.Media.getBitmap(context.getContentResolver(), imageUri); 
     imageView.setImageBitmap(bitmap); 

と、このような何か内部で実行します:あなたからあなたがonActivityResult内でそれらを移動しますonClick方法をこのコードの3行を削除し

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

if (requestCode == PICK_IMAGE && resultCode == RESULT_OK && data != null) { 

    Uri imageUri = data.getData(); 
    try { 
     Bitmap bitmap= MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri); 
     imageView.setImageBitmap(bitmap); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     } 
    } 
} 
+0

助けてくれてありがとう!それは完全に働いた –

0

これを試してみてください。コード、これは私のアプリのために働いています。

public void choosePhotoFromGallary() { 
    Intent galleryIntent = new Intent(Intent.ACTION_PICK, 
      MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 

    startActivityForResult(galleryIntent, GALLERY); 
} 

private void takePhotoFromCamera() { 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    startActivityForResult(intent, CAMERA); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 

    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == RESULT_CANCELED) { 
     return; 
    } 
    if (requestCode == GALLERY) { 
     if (data != null) { 
      Uri contentURI = data.getData(); 
      try { 
       ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
       Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), contentURI); 
       bitmap.compress(Bitmap.CompressFormat.JPEG, 90, bytes); 
       // path = saveImage(bitmap); 

       imageView.setImageBitmap(bitmap); 
      } catch (IOException e) { 
       e.printStackTrace(); 
       Toast.makeText(MainActivity.this, "Failed!", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } else if (requestCode == CAMERA) { 
     Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); 
     imageView.setImageBitmap(thumbnail); 
     path = saveImage(thumbnail); 

    } 
} 

public String saveImage(Bitmap myBitmap) { 
    ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    myBitmap.compress(Bitmap.CompressFormat.JPEG, 90, bytes); 
    File wallpaperDirectory = new File(
      Environment.getExternalStorageDirectory() + IMAGE_DIRECTORY); 
    // have the object build the directory structure, if needed. 
    if (!wallpaperDirectory.exists()) { 
     wallpaperDirectory.mkdirs(); 
    } 

    try { 
     File f = new File(wallpaperDirectory, Calendar.getInstance() 
       .getTimeInMillis() + ".jpg"); 
     f.createNewFile(); 
     FileOutputStream fo = new FileOutputStream(f); 
     fo.write(bytes.toByteArray()); 
     MediaScannerConnection.scanFile(this, 
       new String[]{f.getPath()}, 
       new String[]{"image/jpeg"}, null); 
     fo.close(); 
     Log.d("TAG", "File Saved::--->" + f.getAbsolutePath()); 

     return f.getAbsolutePath(); 
    } catch (IOException e1) { 
     e1.printStackTrace(); 
    } 
    return ""; 
} 
関連する問題