1つのImageViewと1つのボタンを備えた非常にシンプルなアプリケーションがあります。ImageViewによってロードされた最初のDrawableリソースは、XMLレイアウトの「android:src」タグで指定されていますが、実行時に、表示される画像を変更したいと思います。これを行うには、結果のアクティビティを開始して、SDカード(MediaStore.Images.Media.EXTERNAL_CONTENT_URIに送信されたインテント)から画像を選択します。ただし、画像が選択されている場合、選択した画像のURIでImageViewを更新しようとすると、「java.lang.OutOfMemoryError:ビットマップサイズがVMバジェットを超えています」というメッセージが表示されます。
HTC-Heroのカメラ(写真サイズは約1.1M)で撮影した写真を読み込もうとしていますが、500KB未満の写真でしか動作しないようですが、カメラで撮影した写真を読み込む必要があります。どうすればこれを解決できますか?私は何を間違っているのですか。コードは非常に単純で、機能するはずです。
public void onClick(View v){
Intent selectImageIntent=new Intent(Intent.ACTION_PICK ,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(selectImageIntent,1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==Activity.RESULT_OK){
Uri selectedImageUri = data.getData();
Log.i(TAG,"chosen image: "+selectedImageUri.toString());
ImageView imageView = (ImageView) this.findViewById(R.id.ImageView01);
imageView.setImageURI(selectedImageUri);//here I get the OutOfMemoryError
imageView.invalidate();
}else{
//canceled
}
}
psはアプリが行うべき唯一のことです。私は他のオブジェクトを作成していないので、画像を表示する以外に他のものにヒープスペースを使用していないことを指摘したいと思います。