Старайся всегда использовать int.
Как перевернуть изображение на x градусов?
|
public static Image rotateImage(Image im, long alpha) {
int w = im.getWidth();
int h = im.getHeight();
long SIN = MathFP.sin(alpha);
long COS = MathFP.cos(alpha);
long A = SIN * h;
long B = SIN * w;
long C = COS * w;
long D = COS * h;
int W = MathFP.toInt(A + C);
int H = MathFP.toInt(B + D);
int[] src = new int[w * h];
int[] dest = new int[W * H];
im.getRGB(src, 0, w, 0, 0, w, h);
long i0 = -MathFP.mul(SIN, D);
long j0 = MathFP.mul(SIN, A);
for (int y = 0; y < H; y++) {
for (int x = 0; x < W; x++) {
int i = MathFP.toInt(i0 + x * COS + y * SIN);
int j = MathFP.toInt(j0 + y * COS - x * SIN);
if (i < 0 || i >= w || j < 0 || j >= h) {
continue;
}
dest[x + y * W] = src[i + j * w];
}
}
return Image.createRGBImage(dest, W, H, true);
}
Извиняюсь за быдлокод, писал эту функцию очень давно. Файл MathFP.java взял с какого-то сайта (между прочим, этот же самый файл, только немного переработанный, используется и в MP).