У меня очень простое приложение с одним ImageView и кнопкой. Первый ресурс Drawable, загруженный моим ImageView, указан в теге «android: src» в макете XML, однако во время выполнения я хочу, чтобы изменил отображаемый им снимок. Для этого я запускаю операцию для получения изображения с SD-карты (намерение отправлено в MediaStore.Images.Media.EXTERNAL_CONTENT_URI). Однако при выборе картины, я пытаюсь обновить ImageView с URI выбрали картинку, но я получаю сообщение «java.lang.OutOfMemoryError: размер растрового изображения превышает бюджет VM»Изменение содержания образа Image вызывает OutOfMemoryError
I'am пытается загрузить фотографии, сделанные с камерой (размер картинки около 1,1 м) моего HTC-Hero, но без успеха, похоже, работает только с изображениями, размер которых меньше 500 КБ. Однако мне нужно загружать снимки, сделанные камерой. Как я могу это решить? что я делаю неправильно. Мне кажется, что код очень прост и должен работать.
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
}
}
p.s. это единственное, что должно делать приложение, я не создаю другие объекты, поэтому я хотел бы указать, что я не использую пустое место для других вещей, кроме отображения изображения.
Этот метод позволит вам сэкономить, если вы используете FragmentStatePagerAdapter с ImageViews, поскольку переработка растрового изображения приведет к ошибке при повторном раздутии представления. –