2015-06-27 3 views
0
  1. Там нет проблем с низким качеством изображением, то есть менее 300 KB
  2. Там нет никаких проблем с одиночными +90, 180 или 270 градусами вращение.
  3. Только если высокое качество изображения, повернутые с точки зрения изображения более чем в два раза приложение падаетAndroid сбоя приложения при вращают дважды в виде изображений для получения высококачественных изображений из галереи

    private void setupListeners() { 
    
    rotateLeft.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
    
         *imageBitmap = Util.ImageProcess.rotateImage(imageBitmap, 270);* 
    
         showImage.setImageBitmap(imageBitmap); 
    
        } 
    }); 
    
    rotateRight.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
    
         imageBitmap = Util.ImageProcess.rotateImage(imageBitmap, 90); 
    
         showImage.setImageBitmap(imageBitmap); 
    
        } 
    }); 
    
    flip.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
    
         imageBitmap = Util.ImageProcess.rotateImage(imageBitmap, 180); 
    
         showImage.setImageBitmap(imageBitmap); 
    
        } 
    }); 
    
    continueButton.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
    
         saveRotatedImage(); 
    
         Util.MediaScanner.galleryAddPic(getApplicationContext(),imageFile.getAbsolutePath()); 
         startNextActivity(); 
        } 
    }); 
    

    }

Кроме того, для вращения:

public static class ImageProcess{ 

    public static Bitmap rotateImage(Bitmap source, float angle) { 

     Bitmap bitmap = null; 
     Matrix matrix = new Matrix(); 
     matrix.postRotate(angle); 
     try { 
      bitmap = Bitmap.createBitmap(source, 0, 0, source.getWidth(), 
       source.getHeight(), matrix, true); 
     } catch (OutOfMemoryError err) { 
      err.printStackTrace(); 
     } 
     return bitmap; 
+0

Какое исключение вы видите - OutOfMemoryError? –

ответ

1

! Добавить свойство в вашем файле манифеста в теге приложения, чтобы позволить largeheap = true, что могло бы помочь ему попробовать.

+0

Мой текущий минимальный API - это 8. И я могу использовать его только в приведенном выше примере 11 – therahulsubedi

+0

Тогда другой способ получить эту работу - это уменьшить изображения перед их использованием. –

+0

Да, я сделал то же самое. Получив соотношение изображения и масштабировав его. – therahulsubedi

0

Наконец-то я получил решение. И код:

int imageHeight = imageBitmap.getHeight(); 

    int imageWidth = imageBitmap.getWidth(); 

    int newImageheight; 

    int newImageWidth; 

    if (imageHeight <= imageWidth){ 

     newImageWidth = 1200; 
     //getting the length and setting it 1200 

     newImageheight = (1200*imageWidth)/imageHeight; 
     //getting image ratio and multiplying it by the length which 
     //gives width    

    } 

    else { 
     newImageheight = 1200; 

     newImageWidth = (1200*imageHeight)/imageWidth; 

    } 

    imageBitmap = Bitmap.createScaledBitmap(imageBitmap, 
     newImageheight, newImageWidth, false); 
    //setting the new scaled image in lower quality 

Это предотвращает OutOfMemoryError.

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