1

私は setPixel と getPixel 関数を使用していますが、それらは自然に長方形の行列を使用しています。円のような形のピクセルをコピーしようとしています!

更新:今私はこれを使用していますが、これよりも効率的なものがあることを願っています:

for(int i=0;i<eHeight ; i++)
        for(int j=0;j<eWidth ; j++)
            if( Math.pow((i-eHeight/2),2) +  Math.pow((j-eWidth/2),2) < Math.pow((eHeight/2),2)) 
                mutable.setPixel((int)xpos+j, (int)ypos+i, r[i*eWidth + j]) ;
4

2 に答える 2

2

円が固定されている場合は、マスクを使用して非常に高速に処理する方法があるに違いありません。

それ以外の場合は、計算をより効率的に行うことで時間を節約できます。まず、物事を二乗するために pow を使用しないでください。次に、ループの外側で半径を事前計算します。理論上、コンパイラはこれらすべてを修正してくれますが、当てにしないでください。

3 番目に、Bresenham の円アルゴリズムを使用して円の各行の開始点と終了点を検出し、一度に 1 ピクセルずつではなく、一度に 1 行ずつピクセルをコピーすることを検討してください。

于 2010-10-28T18:02:21.057 に答える
0

コピーしようとしているピクセルが円の一部であるかどうかを判断するには、いくつかの計算を行う必要があります。

(x - h)^2 + (y - k)^2 = r^2
于 2010-10-28T17:52:45.523 に答える