2012-06-04 59 views
4

有沒有辦法旋轉位圖而不復制它的副本?或者也許是拿着位圖的imageview?現在我有類似的東西:Android旋轉位圖而不復制

Bitmap bm = BitmapFactory.decodeFile(... 
// get the orientation 
Matrix m = new Matrix 
m.postRotate(orientation) 
Bitmap new = Bitmap.createFromBitmap(bm, ..., m); 

回答

1

真的有算法沒有心不是一個完全獨立的新的地方進行這種旋轉把循環副本,然後刪除當前的一個簡單的方法(非旋轉)副本。我可以想到一個潛在的算法,你基本上必須有一個像素的內存價值,但是我不得不花更多的時間來計算實際的算法。

也看看這個StackOverflow的鏈接: Algorithm to rotate an image 90 degrees in place? (No extra memory)

+0

確定。那麼我不太樂觀。我想如果我無法通過谷歌找到它,它可能不可用。我想我可以從位圖中獲取字節數組,並嘗試編寫一些方法來根據方向或其他內容交換字節......但這看起來像是矯枉過正。無論如何感謝 – Josh

+0

我有一種方法,我只是沒有寫過它。基本上,你將不得不圍繞圖像在(基本上)周圍運動,像像素值的推進。一個例子看起來像一個2×2:開始像素(1,1),複製像素(1,2),將像素(1,1)的值推到像素(1,2)。下一步複製像素(2,2),使用像素(1,2)的副本推入像素(2,2)。複製像素(2,1),將複製的像素(2,2)的值推入像素(2,1)。最後將像素(2,1)的值複製到像素(1,1)中。這個算法需要2個像素的空間。 – trumpetlicks

+0

由於我只是複製和交換整數,所以我認爲它應該相當快。你似乎比我更瞭解這方面的知識,所以你會知道陣列中的像素是如何組織的?我提請你舉個例子,它看起來像素在一個圓圈內移動;對於2x2來說相當簡單,但如果它是4x4,你是從左下角開始繞着中間旋轉嗎?這是如何在數組中排列字節? – Josh