我需要旋转图像(或矩阵)像素的坐标。 我的目标是为每个点计算旋转后它将定位的位置,反之亦然。 我目前正在使用此程序:
private void setRot(int i) {
this.rot = -i / (180.0 / Math.PI);
this.coseno = Math.cos(rot);
this.seno = Math.sin(rot);
}
private Point ruota(int x, int y){
int centerY=h/2;
int centerX=w/2;
int j = (int) (coseno * (x-centerX) - seno * (y-centerY) + centerX);
int i = (int) (seno * (x-centerX) + coseno * (y-centerY) + centerY);
return new Point(j,i);
}
但是,如果您应用测试,对每个像素使用该方法,结果不会围绕中心旋转。
private void esegui() {
for(int i=0;i<w;i++)
for(int j=0;j<h;j++){
Point p = ruota(i,j); //ip : origina image | ip2 destination image
ip2.putPixel(p.x, p.y, ip.getPixel(i, j));
}
nu.setProcessor(ip); // destination image
nu.repaintWindow();
}
有人会帮助我在一个方向和另一个方向上进行适当的旋转吗?
这是我的测试类:
private int getH(){ //height of destination image
return (int) (this.h*Math.abs(coseno) + this.w*Math.abs(seno));
}
private int getW(){
return (int) (this.plus.getHeight()*Math.abs(seno) + this.plus.getWidth()*Math.abs(coseno));
}
public Test(){ // class test
IJ.open();
this.plus = IJ.getImage();
ip = plus.getProcessor();
this.h = this.plus.getHeight(); // height of start image
this.w = this.plus.getWidth();
setRot(14); // rotation of 14°
dHeight = this.getH(); // dimension of the target image
dWidth = this.getW();
System.out.println("h "+h+" gh " + getH());
System.out.println("w "+w+" gw " + getW());
// create an image target
this.nu = NewImage.createRGBImage("rotate", getW(), getH(), 1, NewImage.FILL_BLACK);
ip2 = nu.getProcessor();
esegui();
nu.setProcessor(ip2);
nu.show();
}