安卓如何旋转位图而不产生副本

4
有没有一种方法可以旋转位图而不必将其复制?或者可能是持有位图的ImageView?目前我有类似以下代码:
Bitmap bm = BitmapFactory.decodeFile(...
// get the orientation
Matrix m = new Matrix
m.postRotate(orientation)
Bitmap new = Bitmap.createFromBitmap(bm, ..., m);
1个回答

1

在没有完全不同的新位置放置旋转副本并删除当前(未旋转)副本的情况下,算法上实际上没有一种简单的方法执行此旋转。我可以想到一个潜在的算法,在这个算法中,你必须有一个像素的记忆力,但我需要花更多时间来找出实际的算法。

还可以查看这个StackOverflow链接: 算法:将图像就地旋转90度?(无额外内存)


我有一个想法,但实际上我从未写过这个方法。基本上,您需要像推动像素值一样,在图像中(本质上)以循环运动的方式移动它。例如,对于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
我不太确定Android/Java如何为此数据类型安排它们的数据。但我知道它们提供了以下例程来执行像素操作:getPixels、getPixel、setPixels和setPixel。你可以简单地调用getPixel、SetPixel来执行你想要的算法。这里是Android文档中Bitmap类型的链接。http://developer.android.com/reference/android/graphics/Bitmap.html - trumpetlicks
就算法而言,是的,那基本上是我的思考过程。从外向内螺旋形 :-) 再次强调,我还没有编写算法,但这就是想法。 - trumpetlicks
嗯,好的,我可能会试一试。谢谢你的帮助! - joshkendrick
如果你需要更多的帮助,这是一个有趣的问题,我会尽力帮忙的,所以别犹豫,直接喊我 :-) - trumpetlicks
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接