public PolyLine GenerateLine() { Int16Double[] adj = new Int16Double[4]; for (int i = 0; i < Width; i++) { for (int j = 0; j < Height; j++) { if (bmp.GetPixel(i, j) != BitMap2d.WHITE) { continue; } InitAdj4(adj, i, j); for (int k = 0; k < 4; k++) { Int16Double t = adj[k]; if (bmp.GetPixel(t.X, t.Y) != BitMap2d.WHITE) { Int16Double v1d = AdjIndexToEdge[k][0]; Int16Double v2d = AdjIndexToEdge[k][1]; int x1 = i + v1d.X; int y1 = j + v1d.Y; int x2 = i + v2d.X; int y2 = j + v2d.Y; pb.AddLine(x1, y1, x2, y2); } } } } return(pb.GetLine()); }
private static BitMap2d GetSingleRegionBitmap(BitMap2d b) { BitMap2d bmp = new BitMap2d(b.width, b.height, BitMap2d.WHITE); Queue <Int16Double> queue = new Queue <Int16Double>(); queue.Enqueue(new Int16Double(0, 0)); bmp.SetPixel(0, 0, BitMap2d.BLACK); Int16Double[] adj = new Int16Double[4]; while (queue.Count != 0) { Int16Double pix = queue.Dequeue(); InitAdj4(adj, pix.X, pix.Y); for (int i = 0; i < 4; i++) { Int16Double t = adj[i]; if (t.X >= 0 && t.X < bmp.width && t.Y >= 0 && t.Y < bmp.height && b.GetPixel(t.X, t.Y) == BitMap2d.BLACK && bmp.GetPixel(t.X, t.Y) == BitMap2d.WHITE) { bmp.SetPixel(t.X, t.Y, BitMap2d.BLACK); queue.Enqueue(t); } } } return(bmp); }