在每个像素的位图中,我试图获得它的第一,第二,第三级别的邻居,直到位图结束,但我的解决方案是有点慢,所以让我知道如果任何你们有更好的算法或方式来做到这一点:算法从坐标获取第一,第二,第三个邻居
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 2013-04-22 18:06:57
是你的问题,但更具体的 即时通讯寻找具有相同颜色的最近像素。 – elios264 2013-04-22 18:09:13
你可以使用Min和Max来将你的计划图片剪辑到tourBoundaries前面,这样你就可以消除循环内的if(tourBoundaries.Contains(...)。 – mbeckish 2013-04-22 18:28:00