2016-12-17 9 views
0

現在、画像の回転が必要なゲームを作っています。それを回転させるために、私は次のコードを使用しています。回転した画像の隅のみを別の色に置き換えます。

public ManipulableImage rotate(double degrees){ 
    BufferedImage rotatedImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB); 
    Graphics2D g = rotatedImage.createGraphics(); 
    g.rotate(Math.toRadians(degrees), image.getWidth()/2, image.getHeight()/2); 
    /* 
    ManipulableImage is a custom class that makes it easier to manipulate 
    an image code wise. 
    */ 
    g.drawImage(image, 0, 0, null); 
    return new ManipulableImage(rotatedImage, true).replace(0, -1); 
} 

コードはイメージを回転しますが、透明にする必要があるコーナーは黒くなります。レンダラーはrgb値-1を透明な値として認識し、その値が存在するときピクセルを変更しません。そこで、コーナーのrgb値を0(黒)から-1(透明)に変更したいと思います。

唯一の問題は、元の画像に黒い他のピクセルがあるため、画像を繰り返して、黒のピクセル を置き換えることができません。だから私の質問は、どのように私は回転によって作成された黒のピクセルだけを置き換えることです。

(私は画像の例を提供することができなかった申し訳ありませんが、私はこのコンピュータでスクリーンショットするかどうかはわかりません。)

+0

あなたは、アルゴリズムその作ってみることができますポイントを与えられて、同じ色のすべての隣人を検索し、次にこの隣人を反復する。コーナーが黒いので、4コーナーで反復を開始すると、4つの黒い領域すべてを取得する必要があります。 – ebeneditos

+0

イメージの端に黒いピクセルがある可能性があるので、それは完璧ではありません。 –

+0

新しい画像の端に回転した元の画像の隅がありますか? – ebeneditos

答えて

1

グラフィックスオブジェクトには、これらの新しいピクセルの色を設定するコンテキストがないため、単に黒色になります。あなたは、次を使用する必要があり

BufferedImage rotatedImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB); 

のでBufferedImageは、透明性をサポートしています。

BufferedImage.TYPE_INT_ARGB 

次にあなたが使用できるペイントコードで:

g.setColor(new Color(0, 0, 0, 0)); 
g.fillRect(0, 0, image.getWidth(), image.getHeight()); 
g.rotate(...); 
g.drawImage(...); 
0

私が正しく理解している場合、あなたは以下のローテーションがあります

enter image description here

緑色のセルは回転した元のイメージで、白いセルは削除したい領域です。回転と与え度からは、赤血球の座標を知ることができるので、条件を満たしているセルを削除します。

(x_coord <= x1 and y_coord > x_coord * y1/x1) /* Top Left */ or 
(x_coord >= x2 and y_coord > x_coord * y2/x2) /* Top Right */ or 
(x_coord >= x3 and y_coord < x_coord * y3/x3) /* Bottom Right */ or 
(x_coord <= x4 and y_coord < x_coord * y4/x4) /* Bottom Left */ 

が、これは助けを願って!

+0

ええ、私はこれらの条件が他のコーナーでは少し変更されると思います。ありがとう。これはうまくいくはずです! –

+0

はい!ただ他の条件で編集! – ebeneditos

関連する問題