//相邻点遍历 private BmpPoint GetPoint(BmpPoint point,int i) { switch (i) { case 0: return new BmpPoint(point.x - 1, point.y - 1); case 1: return new BmpPoint(point.x , point.y - 1); case 2: return new BmpPoint(point.x + 1, point.y - 1); case 3: return new BmpPoint(point.x + 1, point.y ); case 4: return new BmpPoint(point.x + 1, point.y + 1); case 5: return new BmpPoint(point.x , point.y + 1); case 6: return new BmpPoint(point.x - 1, point.y + 1); case 7: return new BmpPoint(point.x - 1, point.y ); default:return point; } }
public void ImgInit(Image img, ref Bitmap bmp) { bmpWidth = img.Width; bmpHeight = img.Height; bmpHeight = resizePixel * bmpHeight / bmpWidth; bmpWidth = resizePixel; if (bmpHeight > resizePixel) { bmpWidth = resizePixel * bmpWidth / bmpHeight; bmpHeight = resizePixel; } isBlack = new bool[bmpWidth, bmpHeight]; bmp = new Bitmap(img, bmpWidth, bmpHeight); for (int i = 0; i <= 255; i++) { greynessIndex[i] = new List<BmpPoint>(); edgePointIndex[i] = new List<BmpPoint>(); } originBmp = new Bitmap(bmp); for (int i = 0; i <= bmpWidth - 1; i++) for (int j = 0; j <= bmpHeight - 1; j++) { //灰度索引初始化 Color currColor = bmp.GetPixel(i, j); int greyness = currColor.R + currColor.G + currColor.B; BmpPoint currPoint = new BmpPoint(i,j); greynessIndex[greyness / 3].Add(currPoint); bmp.SetPixel(i, j, Color.White); //边缘索引初始化 if (i == 0 || i == bmpWidth - 1 || j == 0 || j == bmpHeight - 1) { for (int k = greyness / 3; k <= 255; k++) edgePointIndex[k].Add(currPoint); continue; } int newGreyness; currColor = originBmp.GetPixel(i - 1, j); newGreyness = currColor.R + currColor.G + currColor.B; currColor = originBmp.GetPixel(i + 1, j); newGreyness = Math.Max(newGreyness, currColor.R + currColor.G + currColor.B); currColor = originBmp.GetPixel(i, j - 1); newGreyness = Math.Max(newGreyness, currColor.R + currColor.G + currColor.B); currColor = originBmp.GetPixel(i, j + 1); newGreyness = Math.Max(newGreyness, currColor.R + currColor.G + currColor.B); for (int k = greyness / 3 + 1; k <= newGreyness / 3; k++) edgePointIndex[k].Add(currPoint); } oldThresh = 0; whiteBmp = new Bitmap(bmp); }