C#以螺旋形运动图像?

时间:2009-06-01 07:40:51

标签: c# .net image-processing

我希望移动图像的像素,而不是逐行,逐行地以“正常”方式移动。但是从中心像素开始并以螺旋运动向外。但我不知道该怎么做。 关于如何做到这一点的任何建议?

3 个答案:

答案 0 :(得分:5)

您可以使用参数函数来完成此操作,半径函数为r(t)= R,x(t)= Rcos(t)和y(t)= Rsin(t)。 你的意思是this吗?

答案 1 :(得分:0)

反过来考虑这一点会很有帮助。

例如,从左上角开始并沿顺时针方向移动,您将沿顶行移动,然后沿右手侧移动,沿底部移动,向上移动左边缘移动到起始点下方的像素。

然后沿着第二行移动,继续螺旋状。

根据图像的尺寸,您最终会得到一列像素或一行像素,并且会向上/向下或向左/向右移动。

从这个结束点开始,您可以向后按照步骤处理所有像素。

要以数学方式计算您的起始位置,您需要知道图像的宽度/高度以及您想要结束的像素以及当您到达最后一个像素时想要进入的方向。

答案 2 :(得分: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语句中的条件确保只处理作为图像一部分的坐标。