2016-11-09 10 views
2

setRGBBufferedImageを使用してJavaで画像を回転しようとしましたが、奇妙な結果が得られます。誰にも理由がありますか? LEFT側でBufferedImage setRGB strange result

BufferedImage pic1 = ImageIO.read(new File("Images/Input-1.bmp")); 
    int width = pic1.getWidth(null); 
    int height = pic1.getHeight(null); 

    double angle = Math.toRadians(90); 
    double sin = Math.sin(angle); 
    double cos = Math.cos(angle); 
    double x0 = 0.5 * (width - 1);  // point to rotate about 
    double y0 = 0.5 * (height - 1);  // center of image 

    BufferedImage pic2 = pic1; 

    // rotation 
    for (int x = 0; x < width; x++) { 
     for (int y = 0; y < height; y++) { 
      double a = x - x0; 
      double b = y - y0; 
      int xx = (int) (+a * cos - b * sin + x0); 
      int yy = (int) (+a * sin + b * cos + y0); 

      if (xx >= 0 && xx < width && yy >= 0 && yy < height) { 
       pic2.setRGB(x, y, pic1.getRGB(xx, yy)); 
      } 
     } 
    } 
    ImageIO.write(pic2, "bmp", new File("Images/Output2.bmp")); 

オリジナルの絵で、RIGHT側にそれは私の結果です。どのように私はそれを修正することができます誰も考えを持っている? enter image description here

ありがとうございました。

+1

イメージを回転することはできません。別の回転イメージを作成します。イメージを90度回転させる場合は、回転計算を行う必要はありません。 x座標を新しいy座標にコピーし、y座標を新しいx座標にコピーするだけです。 –

答えて

1

問題は、あなたが入力と出力と同じ画像を使用していることである:

たBufferedImage PIC2 = PIC1。

pic2の別のイメージを作成してから、Image1からImage2にピクセルをコピーして回転させる必要があります。

ただし、getRGBとsetRGBを使用すると非常に遅いことに注意してください。ピクセルを直接操作すると100倍高速です。

+0

ありがとう私はこのエラーに気付かなかった:D今それは動作します。 setRBGとgetRGBについて...私はそれらがとても遅いことを知っています....しかし、ピクセル[] []のような画像に変換する方法はわかりません。私はインターネット上のどこからでも検索しましたが、私はそれが画像から配列1Dを得る方法だと私はピクセル[]のようなものを意味しています。しかし、私はピクセルのような2D配列が必要です[] []と私はそれを取得する方法を知りませんでした....あなたと一緒に私を助けてくれますか? :D –

+0

この画像では、ピクセル数が の画像を作成します。http://stackoverflow.com/questions/8856569/how-to-get-the-array-of-pixel-values-for-an-image-in -java-using-getrgb –

関連する問題