旋转图像90度解释

时间:2018-03-27 15:24:13

标签: java image rotation

因此,我设法将图像旋转90度,使用我的代码180并基本搞乱,但我仍然非常困惑代码实际上做了什么以及如何做到这一点。我理解旋转180但不旋转90与下面的代码。可以向我解释一下吗?

OFImage image1 = new OFImage(image);

for (int x = 0; x < image.getWidth(); ++x) {
for (int y = 0; y < image.getHeight(); ++y) {
image.setPixel(y, x, image1.getPixel(image.getWidth() - x - 1, y));

2 个答案:

答案 0 :(得分:2)

我已经评论了你的代码

OFImage image1 = new OFImage(image); // create a copy of `image`

for (int x = 0; x < image.getWidth(); ++x) { // loop through each column of pixels in original presumably from left to right
for (int y = 0; y < image.getHeight(); ++y) { // loop through each cell of the column presumably from top to bottom
image.setPixel(y, x, image1.getPixel(image.getWidth() - x - 1, y)); // here you have swapped the x and y coordinates and you are putting in the pixel from the copy that is at width - x - 1, y

因此,当x = 0(列)和y = 0(行)时,您将(W = image.width - 1,y)(第一行中的最后一个像素)的像素副本放入(0) ,0)so(W,0)=&gt; (0,0) 然后当x = 0且y = 1时,它是(W,1)=&gt; (1,0),然后(W,2)=&gt; (2,0)

在循环开始时,您正在从最右边的列读取,并写入最顶行。

答案 1 :(得分:1)

不确定如何详细描述这个过程,但是它只是使用数学(很明显),用相应的替代像素单独交换每个像素,以产生90度旋转的效果。

为了帮助我理解它,我画了3x3和4x4网格,并标记每个单元格,模拟像素。并简单地使用方法“setPixel”及其参数作为方程,并通过它传递每个像素/坐标以计算结果。我建议做同样的事情,因为它可能是理解该方法如何正常工作的最佳方法。