C# 获取阵列中的周围像素

C# 获取阵列中的周围像素,c#,arrays,math,pixel,C#,Arrays,Math,Pixel,嘿。我的数学不是很好,所以我希望有人能帮我。我有一个一维像素阵列(代表二维图像)。为了访问特定像素,我使用以下公式: image.Pixels[row * imageWidth + col] = pixelColor; 这是可行的,但我也想包括选定像素周围的像素。在不直接使用指针的情况下,获取选定像素周围半径为r的一组像素并将其值设置为pixelColor的最快方法是什么?我正在尝试创建一个绘画类型的应用程序,并希望改变笔刷大小,这将由半径大小决定。 谢谢你的帮助。我不知道C#的具体情况,但是

嘿。我的数学不是很好,所以我希望有人能帮我。我有一个一维像素阵列(代表二维图像)。为了访问特定像素,我使用以下公式:

image.Pixels[row * imageWidth + col] = pixelColor;
这是可行的,但我也想包括选定像素周围的像素。在不直接使用指针的情况下,获取选定像素周围半径为r的一组像素并将其值设置为pixelColor的最快方法是什么?我正在尝试创建一个绘画类型的应用程序,并希望改变笔刷大小,这将由半径大小决定。 谢谢你的帮助。

我不知道C#的具体情况,但是你应该做一些类似的事情

for (i=-r ; i< r ; i++) {
    for (j=-(r - i); j<(r - i); j++) {
       image.Pixels[(row+i)*imageWidth + (col+j)]=pixelColour;
    }
}
for(i=-r;i对于(j=-(r-i);j简单的慢方法是逐步通过行+-r和列+-r中的像素范围,并计算与行和列的距离不大于r。与列的距离,行是平方根(x平方差+y平方差)

一个稍微快一点的方法是比较半径的平方与x平方差+y平方差,因为它们是可比较的

更快的是

另一篇文章:


一旦你有了任何一行的距离,你就可以把像素从col-distance填充到col+distance,不需要计算两者。这样你就可以只计算半个圆。

最简单的方法是使用2D数组。或者至少,设置一个属性,这样你就可以像2D数组一样访问它。你实际上是在画图这是一个钻石,而不是一个圆。不过,这很容易修复。
for (i=-r ; i<r ; i++) {
    for (j=-r; j<r; j++) {
       if((i*i + j*j)<(r*r)){
           image.Pixels[(row+i)*imageWidth + (col+j)]=pixelColour;
       }
    }
}