Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Created by SharpDevelop.
- * User: fhrl0
- * Date: 14/09/2019-21/02/2022
- * Time: 08:00 p. m.
- * Version: 0.3.5
- * To change this template use Tools | Options | Coding | Edit Standard Headers.
- */
- using System;
- using System.Collections.Generic;
- using System.Drawing;
- using System.Windows.Forms;
- namespace search
- {
- /// <summary>
- /// Description of MainForm.
- /// </summary>
- public partial class MainForm : Form
- {
- Bitmap Original,Drawing;
- OpenFileDialog openFileDialogImagen = new OpenFileDialog();
- public MainForm()
- {
- //
- // The InitializeComponent() call is required for Windows Forms designer support.
- //
- InitializeComponent();
- //
- // TODO: Add constructor code after the InitializeComponent() call.
- //
- }
- int codificador(bool[]arregloBits){
- int abstracto=0;
- for(int i=0;i<arregloBits.Length;i++){
- abstracto=abstracto*2;
- if(arregloBits[i])
- abstracto++;
- }
- return abstracto;
- }
- bool esNegro(int x,int y){
- return(int)Original.GetPixel(x,y).R
- +(int)Original.GetPixel(x,y).G
- +(int)Original.GetPixel(x,y).B<(int)383;
- }
- void ButtonMostrarClick(object sender, EventArgs e){
- if(pictureBoxMuestra.Image==null){
- }else{
- Original=(Bitmap)pictureBoxMuestra.Image;
- Drawing=(Bitmap)Original;
- analizar(0,0,Original.Width-1,Original.Height-1);
- pictureBoxMuestra.Refresh();
- pictureBoxMuestra.Image=Drawing;
- }
- }
- void analizar(int xInicio,int yInicio,int xFin,int yFin){
- int xCentro=(xInicio+xFin)/2,
- yCentro=(yInicio+yFin)/2;
- detecta(xInicio,yInicio,xFin,yFin);
- bool[]sentencias={xInicio+3<xFin-3,yInicio+3<yFin-3};
- switch(codificador(sentencias)){//enum{}?
- case 1://01
- analizar(xInicio,yInicio,xFin,yCentro-1);
- analizar(xInicio,yCentro,xFin,yFin);
- return;
- case 2://10
- analizar(xInicio,yInicio,xCentro-1,yFin);analizar(xCentro,yInicio,xFin,yFin);
- return;
- case 3://11
- analizar(xInicio,yInicio,xCentro-1,yCentro-1);analizar(xCentro,yInicio,xFin,yCentro-1);
- analizar(xInicio,yCentro,xCentro-1,yFin); analizar(xCentro,yCentro,xFin,yFin);
- return;
- default:return;//00
- }
- }
- void detecta(int xInicio,int yInicio,int xFin,int yFin){
- int xCentro=(xInicio+xFin)/2,
- yCentro=(yInicio+yFin)/2;
- for(bool[]tipoVorde={esNegro(xInicio,yInicio),esNegro(xFin,yInicio),
- esNegro(xInicio,yFin),esNegro(xFin,yFin)};
- esNegro(xCentro,yCentro)&&(!Equals(Drawing.GetPixel(xCentro,yCentro),Color.OrangeRed));
- xCentro=(xInicio+xFin)/2,yCentro=(yInicio+yFin)/2)
- switch(codificador(tipoVorde)){
- case 0:case 15:return;// x <-nombrar_como.
- default:{
- if(xFin<Original.Width-2&&xInicio>0&&yFin<Original.Height-2&&yInicio>0){
- Drawing.SetPixel(xInicio,yInicio,Color.Blue);
- Drawing.SetPixel(xInicio,yFin,Color.Blue);
- Drawing.SetPixel(xFin,yInicio,Color.Blue);
- Drawing.SetPixel(xFin,yFin,Color.Blue);
- Drawing.SetPixel(xCentro,yCentro,Color.OrangeRed);
- if(esNegro(xCentro,yInicio-1)){yInicio--;
- if(yFin<Original.Height-1&&esNegro(xCentro,yFin+1)){yFin++;
- if(xInicio>=0&&esNegro(xInicio-1,yCentro)){xInicio--;
- if(xFin<Original.Width-1&&esNegro(xFin+1,yCentro)){xFin++;}else{}
- }else{
- if(xFin<Original.Width-1&&esNegro(xFin+1,yCentro)){xFin++;}else{}
- }
- }else{
- if(xInicio>=0&&esNegro(xInicio-1,yCentro)){xInicio--;
- if(xFin<Original.Width-1&&esNegro(xFin+1,yCentro)){xFin++;}else{}
- }else{
- if(xFin<Original.Width-1&&esNegro(xFin+1,yCentro)){xFin++;}else{}
- }
- }
- }else{
- if(yFin<Original.Height-1&esNegro(xCentro,yFin+1)){yFin++;
- if(xInicio>=0&&esNegro(xInicio-1,yCentro)){xInicio--;
- if(xFin<Original.Width-1&&esNegro(xFin+1,yCentro)){xFin++;}else{}
- }else{
- if(xFin<Original.Width-1&&esNegro(xFin+1,yCentro)){xFin++;}else{}
- }
- }else{
- if(xInicio>=0&&esNegro(xInicio-1,yCentro)){xInicio--;
- if(xFin<Original.Width-1&&esNegro(xFin+1,yCentro)){xFin++;}else{}
- }else{
- if(xFin<Original.Width-1&&esNegro(xFin+1,yCentro)){xFin++;}else{Drawing.SetPixel(xCentro,yCentro,Color.OrangeRed);pictureBoxMuestra.Refresh();/*buttonMostrar.Text=xCentro.ToString()+",".ToString()+yCentro.ToString();buttonMostrar.Refresh();*/ return;}
- }
- }
- }
- }else{
- Point centro=new Point(xCentro,yCentro);
- int radio=xFin-xCentro;
- buttonMostrar.Text=radio.ToString()+",".ToString()+centro.ToString();buttonMostrar.Refresh();return;
- }
- }break;
- }
- }
- void ButtonAbrirMouseClick(object sender, MouseEventArgs e){
- openFileDialogImagen.ShowDialog();
- pictureBoxMuestra.Image=Image.FromFile(openFileDialogImagen.FileName);
- buttonMostrar.Enabled=true;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement