2012-06-04 60 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