2014-12-31 11 views
0

Я использую метод ниже, чтобы загружать изображения из галереи Android, но работает, но если я выбираю изображение, сделанное с помощью задней камеры (то есть с большим разрешением), оно не будет загружаться в представление изображения. Он будет загружать меньшие изображения с передней камеры в обязательном порядке.Как масштабировать растровое изображение перед загрузкой в ​​изображение?

Я предполагаю, что изображение должно быть уменьшено до нужной загрузки в изображение.

Кто-нибудь знает, как масштабировать изображение программно?

Я прокомментировал строку кода createScaledBitmap, так как я не уверен, как ее реализовать.

Это полный метод, который получает изображение из галереи:

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

     if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { 
      Uri selectedImage = data.getData(); 
      String[] filePathColumn = { MediaStore.Images.Media.DATA }; 

      Cursor cursor = getContentResolver().query(selectedImage, 
        filePathColumn, null, null, null); 
      cursor.moveToFirst(); 

      int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
      String picturePath = cursor.getString(columnIndex); 
      cursor.close(); 

      if(data != null){ 
      ImageView imageView = (ImageView) findViewById(R.id.capturedDebriImageView); 
      imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); 
      //imageView.setImageBitmap(Bitmap.createScaledBitmap(picturePath, 130, 110, false)); 
      } 
      else if(data == null){ 
       Toast.makeText(this, "Callout for image failed!", 
         Toast.LENGTH_LONG).show(); 

      } 


     } 
    } 
+0

Запустите прокомментированную строку с кодом –

+0

@RobertRowntree Я уже устал, но 'picturePath' - это строка, которая не применима для конструктора. Я получаю следующую ошибку: 'Метод createScaledBitmap (Bitmap, int, int, boolean) в типе Bitmap не применим для аргументов (String, int, int, boolean)' –

ответ

1

Вам нужно загрузить изображение в один растр, а затем создать вторую уменьшенную Картинку из первого:

Bitmap bmp = BitmapFactory.decodeFile(picturePath); 
imageView.setImageBitmap(Bitmap.createScaledBitmap(bmp, 130, 110, false)); 
bmp.recycle(); 

Этот метод позволяет масштабировать растровое изображение до произвольной ширины и высоты. Если вам это не нужно, чтобы быть точным размером, то используя inSampleSize согласно другому ответ является более эффективным, но вы можете только масштаб по степеням 2.

3

На самом деле есть более эффективный способ:

BitmapFactory.Options bitmapOptions = new BitmapFactory.Options(); 
bitmapOptions.inSampleSize = (int) scaleFactor; 
inputStream = getContentResolver().openInputStream(uri); 
Bitmap scaledBitmap = BitmapFactory.decodeStream(inputStream, null, bitmapOptions); 

Таким образом вы избегаете «временного» объекта растрового изображения, вместо этого вы сразу же загружаете уже уменьшенную версию.

Смежные вопросы