2009-06-01 6 views
5

イメージのピクセルを移動したいのですが、行ごとに移動するのではなく、「通常」の方法で列ごとに移動します。しかし、中央のピクセルから始まり、らせん状の動きで外側に向かいます。しかし、私はこれを行う方法がわかりません。 これはどのように行うことができますか?C#イメージを螺旋状に動かす?

+0

非正方形の画像でこれがどのように動作すると思いますか? ...正方形の画像だけが螺旋で完全に動作します。他のものの前に1セットのエッジを当てます。 – jerryjvl

答えて

5

パラメトリック関数を使用して、半径r(t)= R、x(t)= Rcos(t)、y(t)= Rsin(t)の関数を使用してこれを行うことができます。 thisのような意味ですか?

+0

それは私が望むように見えます。どうもありがとうございました! –

0

これを逆に考えてみると便利です。

たとえば、左上隅から開始して時計回りに移動すると、上の行に沿って移動し、次に右下を下に沿って移動し、左端を開始点の下のピクセルまで移動します。

次に、2番目の行に沿って移動し、らせん状に進みます。

画像の大きさによっては、1列のピクセルまたは1行のピクセルで終了し、上下または左右に移動します。

このフィニッシングポイントから、必要に応じてステップを逆行してすべてのピクセルを処理することができます。

出発位置を数学的に調べるには、画像の幅と高さ、最後にどのピクセルに移動したいか、また最後に到達するときの移動方向を知る必要があります。このような

0

何かがそれを行う必要があります。

int x = width/2; 
int y = height/2; 
int left = width * height; 
int dir = 0; 
int cnt = 1; 
int len = 2; 
int[] move = { 1, 0, -1, 0, 1 }; 
while (left > 0) { 
    if (x >= 0 && x < width && y >= 0 && y < height) { 
     // here you do something with the pixel at x,y 
     left--; 
    } 
    x += move[dir % 4]; 
    y += move[(dir % 4) + 1]; 
    if (--cnt == 0) { 
     cnt = len++/2; 
     dir++; 
    } 
} 

画像が正方形でない場合は画像全体がカバーされるまで、スパイラルは、画像の座標外で継続されます。 ifステートメントの条件は、イメージの一部である座標のみが処理されるようにします。

関連する問題