>Java >java지도 시간 >자바 이미지 회전

자바 이미지 회전

黄舟
黄舟원래의
2016-12-30 11:46:291785검색

이미지를 회전하려면 회전 행렬을 사용해야 합니다.

시계 방향 회전 행렬은 다음과 같습니다.

자바 이미지 회전

반시계 방향 회전 행렬은 다음과 같습니다.

자바 이미지 회전

우리는 다음을 사용합니다. 이미지의 중심이 회전점이며, 반시계 방향의 알파도 회전을 위한 코드는 다음과 같습니다.

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 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.