Exemplo n.º 1
0
 //相邻点遍历
 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;
     }
 }
Exemplo n.º 2
0
        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);
        }