2014-02-19 183 views
0

我有一個圖像旋轉的問題。Android旋轉圖像

我嘗試:

 Matrix matrix = new Matrix(); 
    matrix.postRotate(90); 
    BitmapFactory.Options options=new BitmapFactory.Options(); 
    options.inSampleSize = 4; 
    Bitmap pic = BitmapFactory.decodeFile(filePath, options); 
    Bitmap rotatedPhoto = Bitmap.createBitmap(pic, 0, 0, pic.getWidth(), pic.getHeight(), matrix, true); 
    photo.setImageBitmap(rotatedPhoto); 

    try { 
     stream = new FileOutputStream(filePath); 
     rotatedPhoto.compress(CompressFormat.JPEG, 100 ,stream); 
     } 
    catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 

圖片旋轉,但質量是非常丟失。 我該如何解決這個問題?如何在不丟失質量的情況下旋轉圖像? 謝謝!

更新: 又如何旋轉圖像不失分辨率?

+0

我讀過jpeg圖片在旋轉時會顯示丟失。嘗試與PNG一次。另請參閱http://stackoverflow.com/questions/8767418/rotate-bitmap-and-maintain-size –

+0

如何旋轉圖像而不會失去分辨率? :) – Cocuckalol

+0

我應該發佈它作爲答案。 :)順便說一句,你現在用哪種方法旋轉? –

回答

1

我認爲你的問題正在出現,因爲你將inSampleSize設置爲4.這意味着返回的圖像將比原始圖像小4倍。

http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize

嘗試設置options.inSampleSize 1 - 這是否幫助?

雖然在處理圖片時要小心 - 您在Android應用程序中玩的內存很少。將一些大圖像同時加載到內存中通常會導致應用程序崩潰。

+0

我得到一個outOfMemory錯誤。我嘗試刪除此選項並保存圖像而不在imageview中顯示,但照片質量仍然丟失。 – Cocuckalol

+0

這總是您在操作圖像時需要警惕的事情。原始圖像的大小如何?也許嘗試設置inSampleSize爲2,如果它是一個非常大的圖像 - 您可能需要嘗試。你是在循環中調用它嗎?確保你正確處置了你正在使用的內存。否則,我猜你的應用可能只是在這個點之前接近內存限制運行?在這種情況下,您可能需要瀏覽應用程序的其餘部分,並查找其他可能佔用內存的區域。 – Jasongiss

+0

其實,我看到你在內存中同時有2個位圖副本(pic&rotatedPic)。這可能是事故的原因?它在哪一點崩潰? – Jasongiss