The rotation of the image requires the use of a rotation matrix.
The clockwise rotation matrix is:
The counterclockwise rotation matrix is:
We use The center of the image is the rotation point, and the code for counterclockwise rotation of alpha degrees is as follows:
public void Rotation(double degree){ degree = Math.toRadians(degree);//化为弧度 int sw = (int) Math.sqrt(w*w +h*h);//旋转后图像的w int sh = sw;//旋转后图像的h int ox = w/2; int oy = h/2; int[] d = new int[sw*sh]; for (int y = 0; y < h; y++) { for (int x = 0; x < w; x++) { int x1 = (int)(Math.cos(degree)*(x-ox) + Math.sin(degree)*(y-oy));//原图像上点旋转后的点的x坐标 int y1 = (int)(Math.cos(degree)*(y-oy) - Math.sin(degree)*(x-ox)); d[x1-sw/2+ (y1+sh/2)* sw] = data[x + y * w]; } } this.data = d; this.w = sw; this.h = sh; }
The result of the rotation:
As you can see from the image, some points are abandoned, so after rotation, we still need to perform interpolation. Bilinear interpolation is recommended.
But for specific angles, we can still achieve lossless.
Rotate 90 degrees clockwise, rotate 90 degrees counterclockwise, and flip the key code:
for (int y = 0; y < h; y++) { for (int x = 0; x < w; x++) { d[y+ (w-x-1)* h] = data[x + y * w];//逆时针 d[h-1-y+ x* h] = data[x + y * w];//顺时针 d[w-x-1+ y* w] = data[x + y * w];//翻转 } }
The results of the operation are as follows:
The above is the content of java image rotation. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!