픽셀이 배열 int pixels[]
에 저장된 비트 맵을 회전하려고합니다. 나는 다음과 같은 방법을 가지고 :비트 맵 픽셀 회전
public void rotate(double angle) {
double radians = Math.toRadians(angle);
double cos, sin;
cos = Math.cos(radians);
sin = Math.sin(radians);
int[] pixels2 = pixels;
for (int x = 0; x < width; x++)
for (int y = 0; y < height; y++) {
int centerx = this.width/2, centery = this.height/2;
int m = x - centerx;
int n = y - centery;
int j = (int) (m * cos + n * sin);
int k = (int) (n * cos - m * sin);
j += centerx;
k += centery;
if (!((j < 0) || (j > this.width - 1) || (k < 0) || (k > this.height - 1)))
try {
pixels2[(x * this.width + y)] = pixels[(k * this.width + j)];
} catch (Exception e) {
e.printStackTrace();
}
}
pixels = pixels2;
}
을하지만 그것은 단지 나에게 미친 결과를 제공합니다. 누구든지 오류가 어디에 있는지 알고 있습니까?
'clone()'은 얕은 복사본을 만듭니다. 즉, 배열 내용을 복제하지 않습니다. 'int'를 사용하면 그다지 중요하지 않습니다. 그러나 일반적으로'int [] pixels2 = Arrays.copyOf (pixels, pixels.length)에서'Arrays.copyOf'를 사용하는 것이 더 좋습니다. –
'copyOf' 얕은 사본도 만듭니다. 사실 개체를 깊이 복사하는 표준 메커니즘이 없습니다. –