2017-01-05 8 views
1

Моего приложения предполагается получить картину из галереи и отобразить его в ImageView, я получаю то, что я хочу со всеми изображениями, кроме тех, которые я взял с моей назад камеры, они появляются в галерее для меня, чтобы выбрать и даже вернуть путь, но все, что я получаю, - пустота в моем ImageView.Намерение только получать изображения с задней камерой

Это код:

Intent intent = new Intent(); 
intent.setType("image/*"); 
intent.setAction(Intent.ACTION_PICK); 
startActivityForResult(intent, SELECT_PICTURE); 

мой onActivityResult код это:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == SELECT_PICTURE && resultCode == RESULT_OK && null != data) { 
     Uri uri = data.getData(); 

     try { 
      Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri); 
      ImageView iv = (ImageView) getView().findViewById(R.id.iv_foto); 
      iv.setImageBitmap(bitmap); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Он работает с изображениями, сделанных с моей передней камеры.

Я не пробовал приложение на другом телефоне, но если это случится у меня, скорее всего, у кого-то будет такая же проблема.

+1

Пожалуйста, добавьте код, в котором вы отобразить изображение в ImageView. – Christopher

+1

Как вы устанавливаете Image to ImageView, покажите этот код. – Rahul

+0

Обратные изображения с камерой обычно довольно большие. Сжатие их с растровой фабрикой перед показом в imageView –

ответ

1

Проблема с размером изображения.

Я успешно установил тот же вопрос с масштабированием Bitmap перед отображением в ImageView

Bitmap sourceBitmap = MediaStore.Images.Media.getBitmap(contentResolver, uri); 

try { 
     Bitmap sourceBitmap = MediaStore.Images.Media.getBitmap(contentResolver, uri); 

     float rotationInDegrees = 0; 

     Cursor cursor = contentResolver.query(uri, new String[]{MediaStore.Images.ImageColumns.ORIENTATION}, 
       null, 
       null, 
       null); 

     if (cursor != null && cursor.moveToFirst()) { 
      int col = cursor.getColumnIndex(MediaStore.Images.ImageColumns.ORIENTATION); 
      if (col != -1) 
       rotationInDegrees = cursor.getInt(col); 
      cursor.close(); 
     } 

     Matrix matrix = new Matrix(); 
     matrix.preRotate(rotationInDegrees); 

     int width, height; 
     double aspectRatio; 
     aspectRatio = (double) sourceBitmap.getWidth()/sourceBitmap.getHeight(); 
     if (sourceBitmap.getHeight() > sourceBitmap.getWidth()) { 
      height = MAX_IMAGE_DIMENSION; 
      width = (int) (height * aspectRatio); 
     } else { 
      width = MAX_IMAGE_DIMENSION; 
      height = (int) (width/aspectRatio); 
     } 
     sourceBitmap = Bitmap.createScaledBitmap(sourceBitmap, width, height, false); 

     return Bitmap.createBitmap(sourceBitmap, 0, 0, sourceBitmap.getWidth(), sourceBitmap.getHeight(), matrix, false); 

} catch (IOException e) { 
     e.printStackTrace(); 
     throw new RuntimeException("[email protected]: IOException"); 
} 
+0

'масштабирование растрового изображения перед отображением '. Интересно. Но во многих случаях вы не можете масштабировать его таким образом, поскольку 'sourceBitmap' будет' null' уже в первом заявлении из-за нехватки памяти. Вы даже не проверяете «null». – greenapps

+0

Идеальное решение! Большое спасибо! – otrebla

1

причина - я думаю память отсутствует. обратитесь по этой ссылке Compress camera image before upload вы можете поднять

+0

О, возможно, это проблема, я скоро проверю код. Большое спасибо. – otrebla

0

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

+0

Он получает изображения из галереи. ИСКЛЮЧАЕТ те, что были сделаны с задней камерой, библиотека, несомненно, решит мою проблему, но я хочу знать, почему это происходит в первую очередь. – otrebla