각 픽셀의 비트 맵에서 비트 맵의 끝까지 이웃의 첫 번째, 두 번째, 세 번째 ... 레벨을 얻으려고합니다. 그러나 내 솔루션 조금 천천히, 그래서 너희들 중 하나가이 작업을 수행 할 수있는 더 좋은 알고리즘 또는 방법이 있으면 알려 :좌표에서 첫 번째, 두 번째, 세 번째 이웃을 얻는 알고리즘
private IEnumerable<Point> getNeightboorsOfLevel(int level, Point startPos, Point[,] bitMap)
{
var maxX = bitMap.GetLength(0);
var maxY = bitMap.GetLength(1);
if (level > Math.Max(maxX, maxY)) yield break;
int startXpos = startPos.X - level;
int startYpos = startPos.Y - level;
int sizeXY = level * 2;
var plannedTour = new Rectangle(startXpos, startYpos, sizeXY, sizeXY);
var tourBoundaries = new Rectangle(0, 0, maxX, maxY);
for(int UpTour = plannedTour.X; UpTour<plannedTour.Width; UpTour++)
if (tourBoundaries.Contains(UpTour,plannedTour.Y))
yield return bitMap[UpTour,plannedTour.Y];
for(int RightTour = plannedTour.Y; RightTour<plannedTour.Height;RightTour++)
if (tourBoundaries.Contains(plannedTour.Right,RightTour))
yield return bitMap[plannedTour.Right,RightTour];
for(int DownTour = plannedTour.X; DownTour<plannedTour.Width;DownTour++)
if (tourBoundaries.Contains(DownTour,plannedTour.Bottom))
yield return bitMap[DownTour,plannedTour.Bottom];
for (int LeftTour = plannedTour.Y; LeftTour < plannedTour.Height; LeftTour++)
if (tourBoundaries.Contains(plannedTour.X,LeftTour))
yield return bitMap[plannedTour.X,LeftTour];
}
픽셀 P가 가장자리보다 N에 더 가깝다면 N 번째 레벨의 이웃으로 무엇을하고 싶습니까? 경계에있는 픽셀 만보고 하시겠습니까? – Floris
네 질문에 대한하지만 더 구체적인 것 메신저 같은 색상을 가진 가장 가까운 픽셀을 찾을 triying. – elios264
Min 및 Max를 사용하여 계획된 둘러보기를 둘러 쌀 수 있습니다. 앞쪽의 'if (tourBoundaries.Contains (...)'체크 표시를 제거 할 수 있습니다. – mbeckish