이미지를 회전하려면 회전 행렬을 사용해야 합니다.
시계 방향 회전 행렬은 다음과 같습니다.
반시계 방향 회전 행렬은 다음과 같습니다.
우리는 다음을 사용합니다. 이미지의 중심이 회전점이며, 반시계 방향의 알파도 회전을 위한 코드는 다음과 같습니다.
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; }
회전 결과:
이미지에서 볼 수 있듯이 일부 점은 버려지므로 회전 후에도 여전히 이중선형 보간을 수행하는 것이 좋습니다.
그러나 특정 각도에서는 여전히 무손실을 얻을 수 있습니다.
시계방향으로 90도 회전, 반시계방향으로 90도 회전, 키코드 뒤집기 :
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];//翻转 } }
실행 결과는 다음과 같습니다.
위 내용은 자바 이미지 회전 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(m.sbmmt.com)를 참고해주세요!