2013-08-29 2 views
1

Я пытаюсь декодировать растровое изображение, но функция возвращает значение null, и я не знаю почему.Декодирование bitmap возвращает null

Код:

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

if(requestCode == SELECT_FOTO) 
{ 
    Uri imgselect = data.getData(); 
    String imgpath = imgselect.getPath(); 
    File f = new File (imgpath); 
    Bitmap bm = BitmapFactory.decodeFile(f.getAbsolutePath()); 
    Toast.makeText(Insertarlugar.this, "Bitmap es" + bm, Toast.LENGTH_LONG).show(); 
} 

Тост показывает мне, что Ьт равно нулю. Я изменил f.getAbsolutePath() для f.getPath(), но результат тот же. Uri imgselect и String imgpath имеют значения. Я не использую SD-карту, и я получаю растровое изображение из галереи.

Как изменить размер растрового изображения?

Спасибо.

+1

сначала проверьте значение imgpath –

+0

Как я уже сказал в своем сообщении, я проверил значение imgselect. Это контент/медиа/внешний/images/media/11295, поэтому он имеет ценность. – axmug

ответ

3

попробовать это и проверить, прежде чем ImagePath не является нулевым

Uri imgselect = data.getData(); 
String imgpath = imgselect.getPath(); 
if(imgpath !=null) 
{ 
    Bitmap bm = BitmapFactory.decodeFile(imgpath); 
} 

если изображение есть в больших тем он не может декодировать ImagePath так что вы пытаетесь это и дать ширину и высоту в 60 и 60

public static Bitmap decodeSampledBitmapFromPath(String path, int reqWidth, 
      int reqHeight) { 

     final BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inJustDecodeBounds = true; 
     BitmapFactory.decodeFile(path, options); 

     options.inSampleSize = calculateInSampleSize(options, reqWidth, 
       reqHeight); 

     // Decode bitmap with inSampleSize set 
     options.inJustDecodeBounds = false; 
     Bitmap bmp = BitmapFactory.decodeFile(path, options); 
     return bmp; 
     } 

    public static int calculateInSampleSize(BitmapFactory.Options options, 
      int reqWidth, int reqHeight) { 

     final int height = options.outHeight; 
     final int width = options.outWidth; 
     int inSampleSize = 1; 

     if (height > reqHeight || width > reqWidth) { 
      if (width > height) { 
       inSampleSize = Math.round((float) height/(float) reqHeight); 
      } else { 
       inSampleSize = Math.round((float) width/(float) reqWidth); 
      } 
     } 
     return inSampleSize; 
     } 
+1

Я исправил проблему. Я не показывал изображение на экране. Спасибо за ответ. – axmug

+0

Идеальное решение ... Работало для меня. –

+0

@sunil kumar Можете ли вы, пожалуйста, решить мою проблему почти так же http://stackoverflow.com/questions/43868432/how-to-set-image-in-imageview-choosing-file-from-gallery-and-giving-null -except? noredirect = 1 # comment74772806_43868432 – Andie

0

Нет необходимости использовать фактический файл, потому что вы имеете в виду на Content Provider (который сделает это за вас)

Uri imgselect = data.getData(); 
Bitmap bm = BitmapFactory.decodeFile(imgselect.getPath()); 

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

+0

Я пробовал, что вы набрали, но он не запускается. Я получаю растровое изображение с нулевым декодированием. Я расшифровал Uri, но результат тот же. Я застрял. – axmug

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