La rotation de l'image nécessite l'utilisation d'une matrice de rotation.
La matrice de rotation dans le sens horaire est :
La matrice de rotation dans le sens antihoraire est :
Nous utilisons Le centre de l'image est le point de rotation, et le code pour la rotation dans le sens inverse des aiguilles d'une montre des degrés alpha est le suivant :
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; }
Le résultat de la rotation :
Comme vous pouvez le voir sur l'image, certains points sont abandonnés, donc après la rotation, nous devons encore effectuer une interpolation bilinéaire.
Mais pour des angles spécifiques, nous pouvons toujours obtenir un résultat sans perte.
Tournez de 90 degrés dans le sens des aiguilles d'une montre, faites pivoter de 90 degrés dans le sens inverse des aiguilles d'une montre et retournez le code clé :
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];//翻转 } }
Le résultat de la course est le suivant :
Ce qui précède est le contenu de la rotation des images Java. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !