private void criaAET(Bitmap imageBitSrc, ListaET[] listas) { try { ListaET AET = new ListaET(); int Y = -1; retornaET(listas, AET, ref Y); while (AET.Inicio != null) { AET.retirarIgual(Y); // retirar y == ymax if (AET.Inicio != null) { AET.ordenaXmin(); // ordernar a AET pelo xmin de forma crescente pintarValores(AET, imageBitSrc, Y); // desenhar aos pares na lista AET, de xmin até xmin incrementaXMIN(AET); // incrementar o xmin de cada caixa com seu incrx respectivo Y++; // Y++ retornaET(listas, AET, ref Y); // chamar o retornaET passado o Y } } } catch (Exception e) { } }
private void incrementaXMIN(ListaET AET) { NoListaET aux = AET.Inicio; while (aux != null) { aux.Xmin1 += aux.IncrX1; aux = aux.Prox; } }
private void pintarValores(ListaET AET, Bitmap imageBitSrc, int y) { NoListaET cx1, cx2; cx1 = AET.Inicio; cx2 = AET.Inicio.Prox; while (cx2 != null) { for (int i = (int)cx1.Xmin1; i < cx2.Xmin1; i++) { imageBitSrc.SetPixel(i, y, Color.FromArgb(150, 150, 150)); } cx1 = cx1.Prox.Prox; cx2 = cx1 == null ? null : cx2.Prox.Prox; } }
private void retornaET(ListaET[] listas, ListaET AET, ref int y) { NoListaET aux; if (y == -1) { for (int i = 0; i < listas.Length; i++) { if (listas[i] != null) { y = i; aux = listas[i].Inicio; while (aux != null) { AET.inserir(aux.Ymax1, aux.Xmin1, aux.IncrX1); aux = aux.Prox; } break; } } } else { if (listas[y] != null) { aux = listas[y].Inicio; while (aux != null) { AET.inserir(aux.Ymax1, aux.Xmin1, aux.IncrX1); aux = aux.Prox; } } } }
private void carregaListaET(Bitmap imageBitSrc) { int tamLista = retornaYMax(); ListaET[] listas = new ListaET[tamLista + 1]; double Ymax = 0, Xmim = 0, incrX = 0, dy, dx, Ymin; for (int i = 0; i < verticesAtuais.Count - 1; i++) { if (verticesAtuais[i].Y < verticesAtuais[i + 1].Y) { Ymax = verticesAtuais[i + 1].Y; Xmim = verticesAtuais[i].X; Ymin = verticesAtuais[i].Y; dy = Ymax - Ymin; dx = verticesAtuais[i + 1].X - Xmim; } else { Ymax = verticesAtuais[i].Y; Xmim = verticesAtuais[i + 1].X; Ymin = verticesAtuais[i + 1].Y; dy = Ymax - Ymin; dx = verticesAtuais[i].X - Xmim; } incrX = dx / dy; if (listas[(int)Ymin] == null) { listas[(int)Ymin] = new ListaET(); } listas[(int)Ymin].inserir(Ymax, Xmim, incrX); } if (verticesAtuais[0].Y < verticesAtuais[verticesAtuais.Count - 1].Y) { Ymax = verticesAtuais[verticesAtuais.Count - 1].Y; Xmim = verticesAtuais[0].X; Ymin = verticesAtuais[0].Y; dy = Ymax - Ymin; dx = verticesAtuais[verticesAtuais.Count - 1].X - Xmim; } else { Ymax = verticesAtuais[0].Y; Xmim = verticesAtuais[verticesAtuais.Count - 1].X; Ymin = verticesAtuais[verticesAtuais.Count - 1].Y; dy = Ymax - Ymin; dx = verticesAtuais[0].X - Xmim; } incrX = dx / dy; if (listas[(int)Ymin] == null) { listas[(int)Ymin] = new ListaET(); } listas[(int)Ymin].inserir(Ymax, Xmim, incrX); criaAET(imageBitSrc, listas); }