私はこのアルゴリズムをイメージの回転に使用しますが、四角形ではなく四角形だけを回転させることに気付きました。なぜこのコードは正方形だけを回転させるのですか?
誰でも知っていますか?
メインコード-問題:
public static int[] rotate(double angle, int[] pixels, int width, int height) {
final double radians = Math.toRadians(angle);
final double cos = Math.cos(radians);
final double sin = Math.sin(radians);
final int[] pixels2 = new int[pixels.length];
for(int pixel = 0; pixel < pixels2.length; pixel++) {
pixels2[pixel] = 0xFFFFFF;
}
for(int x = 0; x < width; x++) {
for(int y = 0; y < height; y++) {
final int centerx = width/2;
final int centery = height/2;
final int m = x - centerx;
final int n = y - centery;
final int j = ((int) (m * cos + n * sin)) + centerx;
final int k = ((int) (n * cos - m * sin)) + centery;
if(j >= 0 && j < width && k >= 0 && k < height){
pixels2[ (y * width + x) ] = pixels[ (k * width + j) ];
}
}
}
return pixels2;
}
コンテキストアプリケーション:
try {
BufferedImage testrot = ImageIO.read(new File("./32x32.png"));
int[] linearpixels = new int[testrot.getWidth() * testrot.getHeight()];
int c = 0;
for(int i = 0; i < testrot.getWidth(); i++){
for(int j = 0; j < testrot.getHeight(); j++){
linearpixels[c] = testrot.getRGB(i, j);
c++;
}
}
int[] lintestrot = rotate(50, linearpixels, 32, 32);
BufferedImage image = new BufferedImage(70, 70, BufferedImage.TYPE_INT_RGB);
c = 0;
for(int i = 0; i < 32; i++){
for(int j = 0; j < 32; j++){
image.setRGB(i, j, lintestrot[c]);
c++;
}
}
File outputfile = new File("test002.bmp");
ImageIO.write(image, "bmp", outputfile);
} catch (IOException e1) {
e1.printStackTrace();
}
あなたは33幅または高さに変更した場合、結果が(間違ったイメージ)間違っているだろう。
代わりに[このような](http://stackoverflow.com/questions/37758061/rotate-a-buffered-image-in-java/37758533#37758533)を実行できなかった理由はありますか? – MadProgrammer
アルゴリズムを使うともっと自由になりますが、私はすでにあなたの話題を分析しています。 –
forループの制限を33などに変更していますか? –