2

私は現在、WritableRaster の使用を進めており、それは setPixed メソッドです。ピクセルを 1 つだけ設定するのではなく、半径 r の「円」を設定する必要があります。私が考えているのは、次のようなものです。

for(int y = -r; y < r; y++)
{
    for(int x = -r; x < r; x++)
    {
         raster.setPixel(x,y,color);
 }}

問題は、これで円を作成できるかどうかです。そうであれば、内部のすべてのピクセルを通過させるにはどうすればよいでしょうか?

前もって感謝します!

編集:申し訳ありませんが、これを明確にしませんでした-透明なキャンバスにゴムツールを作成しているため、透明な色で円を描いても、以前にあったものは削除されません...これが私が使用している理由ですsetPixel.

EDIT EDIT: これはコードの出力です (g2d では、メソッド setPixel のように 1 つのピクセルのみを埋めるように同じ値で drawLine を使用します): http://i.imgur.com/a5QNMuX.png?1

EDIT EDIT EDIT: 同じ理由で誰かがこのコードを使用したい場合は、BufferedImage.setRGB() を使用することをお勧めします。色 (最後のパラメーター) をどうするかわからない場合は、次のようなものを使用します。

...
buffImg.setRGB(x,y,new Color(r,g,b,a).getRGB());
...
4

1 に答える 1

1

行っているように各行を個別に入力する必要がありますがx、半径の境界を調整する必要があることに注意してください。これは、2D (離散) 統合を行うのといくらか似ています。基本的な考え方はx^2 + y^2 = r^2、外側の境界であり、 と の両方yr固定されているため、...:

for(int y = -r; y < r; y++)
{
    int bound = (int)(sqrt(r * r - y * y) + 0.5);
    for(int x = -bound; x < bound; x++)
    {
         raster.setPixel(x,y,color);
    }
}

... + 0.5は常に正であるため、最も近い整数に丸める安全な方法です ( floorwith キャストを使用するだけではありません) 。bound

于 2014-02-04T16:36:28.957 に答える