2013-12-20 4 views
-1

Следующий код взят из разработчиков Android, с небольшими изменениями:Android: не сворачивать растровый объект

private static int calculateInSampleSize(BitmapFactory.Options options, 
     int reqWidth, int reqHeight) { 
    // Raw height and width of image 
    final int height = options.outHeight; 
    final int width = options.outWidth; 
    int inSampleSize = 1; 

    if (height > reqHeight || width > reqWidth) { 

     final int halfHeight = height/2; 
     final int halfWidth = width/2; 

     // Calculate the largest inSampleSize value that is a power of 2 and 
     // keeps both height and width larger than the requested height and 
     // width. 
     while ((halfHeight/inSampleSize) > reqHeight 
       && (halfWidth/inSampleSize) > reqWidth) { 
      inSampleSize *= 2; 
     } 
    } 

    return inSampleSize; 
} 

public static Bitmap decodeSampledBitmap(Bitmap bitmap, int reqWidth, 
     int reqHeight) { 

    int size = bitmap.getRowBytes() * bitmap.getHeight(); 
    InputStream is = new ByteArrayInputStream(new byte[size]); 

    final BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inJustDecodeBounds = true; 
    BitmapFactory.decodeStream(is, null, options); 
      // I set these manually because decodeStream set them to -1 
    options.outHeight = bitmap.getHeight(); 
    options.outWidth = bitmap.getWidth(); 

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

    // Decode bitmap with inSampleSize set 
    options.inJustDecodeBounds = false; 
    // can the number of rows be wrong now? 
    size = bitmap.getRowBytes() * options.outHeight; 
    is = new ByteArrayInputStream(new byte[size]); 
    return BitmapFactory.decodeStream(is, null, options); 
} 

У меня есть две проблемы:

  1. При чтении растровых границ в decodeStream, опции .outHeight и options.outWidth установлены в -1, и я не знаю, почему
  2. Открытый метод возвращает null, когда растровое изображение берется из камеры моего устройства (следовательно, считывается из файла), но отлично работает при растровом изображении взято из образа t шляпа уже существует на моем телефоне (выбран из галереи).

Любые идеи, в которых может возникнуть проблема? благодаря!

+0

Ваш каталог содержит изображения? – QuokMoon

+0

как вы ожидаете, что BitmapFactory расшифрует 'is', так как в нем ничего нет? ('new byte [size]' довольно пуст ...) – njzk2

+0

использовать http://developer.android.com/reference/android/graphics/Bitmap.html createScaledBitmap – njzk2

ответ

0

Похоже, что изображение как-то повреждено или неправильно сохранено. В случаях тумана, когда битмап возвращается как null, это проблема.

Вы можете проверить изображение в средстве просмотра изображений на рабочем столе, скопировав захваченное изображение на рабочий стол.

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