All pastes #2051132 Raw Edit

Something

public text v1 · immutable
#2051132 ·published 2011-04-27 08:29 UTC
rendered paste body
private void button3_Click(object sender, EventArgs e)
        { //událost tlačítka 
            //najdi shluky A  - picture 9, listbox3   --- podminka na min. velikost shluků
            ShlukyA.Clear();
            listBox3.Items.Clear();
            listBox5.Items.Clear();
            tempA = new Bitmap(pictureFiltrA);
            najdiShlukyA(Convert.ToInt32(textBox5.Text)); //vstupni parametr je velikost
          
            if (checkBox1.Checked == true)   //vykresleni bounding boxu
            { 
                pictureOznaceneShlukyA = new Bitmap(pictureLoadA);
                Graphics g = Graphics.FromImage(pictureOznaceneShlukyA);
                Pen rPen = new Pen(Color.Red, 3);
                //listBox1.Items.Add("test: "+ Shluky.Count().ToString());
                for (int i = 0; i < ShlukyA.Count(); i++)
                {
                    int sirka = ShlukyA[i].maxX.X - ShlukyA[i].minX.X;
                    int vyska = ShlukyA[i].maxY.Y - ShlukyA[i].minY.Y;
                    //g.DrawRectangle(rPen, Shluky[i].minX.X, Shluky[i].minY.Y, Shluky[i].maxX.X - Shluky[i].minX.X, -Shluky[i].maxY.Y-Shluky[i].minY.Y);
                    g.DrawRectangle(rPen, ShlukyA[i].minX.X, ShlukyA[i].minY.Y, sirka, vyska);
                    
                }
                rPen.Dispose();
                g.Dispose();
                //pictureBox5.Image = bitmapa;
                pictureBox9.Image = pictureOznaceneShlukyA;
            }
            label13.Text = "Celkem: " +ShlukyA.Count().ToString();
            if (ShlukyA.Count() > 0)
            {
                int min = ShlukyA[0].plocha;
                int max = ShlukyA[0].plocha;
                int celkem = ShlukyA[0].plocha;
                for (int i = 1; i < ShlukyA.Count(); i++)
                {
                    if (min > ShlukyA[i].plocha)
                    {
                        min = ShlukyA[i].plocha;
                    }
                    if (max < ShlukyA[i].plocha)
                    {
                        max = ShlukyA[i].plocha;
                    }
                    celkem += ShlukyA[i].plocha;
                }

                listBox5.Items.Add("Celkem: " + ShlukyA.Count().ToString());
                listBox5.Items.Add("Min. velikost: " + min.ToString());
                listBox5.Items.Add("Max. velikost: " + max.ToString());
                listBox5.Items.Add("Prům. velikost: " + (celkem / ShlukyA.Count()).ToString());
            }
        }




private void najdiShlukyA(int min)
        {
            //int pocet = 0;
            //Point tempPoint;
            for (int y = 0; y < tempA.Height; y++)
            {
                for (int x = 0; x < tempA.Width; x++)
                {
                    if (tempA.GetPixel(x, y).A > 128)
                    {
                        pixelyVZasobniku.Push(new Point(x, y));
                        while (pixelyVZasobniku.Count > 0)
                        {
                            Point aktualni = pixelyVZasobniku.Pop();
                            // Puvodni obsah metody seminko
                            if (aktualni.X >= 0 && aktualni.X < tempA.Width && aktualni.Y >= 0 && aktualni.Y < tempA.Height)
                            {
                                if (tempA.GetPixel(aktualni.X, aktualni.Y).A > 128)
                                {
                                    pixelyJednohoShluku.Add(aktualni);
                                    tempA.SetPixel(aktualni.X, aktualni.Y, Color.FromArgb(0, Color.Black));

                                    pixelyVZasobniku.Push(new Point(aktualni.X - 1, aktualni.Y));
                                    pixelyVZasobniku.Push(new Point(aktualni.X + 1, aktualni.Y));
                                    pixelyVZasobniku.Push(new Point(aktualni.X, aktualni.Y - 1));
                                    pixelyVZasobniku.Push(new Point(aktualni.X, aktualni.Y + 1));
                                }
                            }
                        }
                        if (pixelyJednohoShluku.Count() >= min)
                        {
                            ShlukyA.Add(new Shluk(ShlukyA.Count()));
                            ShlukyA[ShlukyA.Count() - 1].AddPixs(pixelyJednohoShluku);
                            //foreach (Point p in pixelyJednohoShluku)
                            //{
                            //    ShlukyA[ShlukyA.Count() - 1].AddPix(p);
                            //}


                            int minRozmer = Convert.ToInt32(textBox9.Text);

                            if (ShlukyA[ShlukyA.Count() - 1].maxX.X - ShlukyA[ShlukyA.Count() - 1].minX.X <= minRozmer ||
                                ShlukyA[ShlukyA.Count() - 1].maxY.Y - ShlukyA[ShlukyA.Count() - 1].minY.Y <= minRozmer)
                            {
                                ShlukyA.Remove(ShlukyA[ShlukyA.Count() - 1]);
                            }


                            listBox3.Items.Add("Pocet pix : " + pixelyJednohoShluku.Count().ToString());
                        }
                        pixelyJednohoShluku.Clear(); // nekde dochazi ke smazani pixelů v ShlukuA[i].pixely ??
                    }
                }
            }
            pixelyVZasobniku.Clear();
        }


//trida shluku
public class Shluk
    {
        public int id;
        public Point minY;
        public Point maxY;
        public Point minX;
        public Point maxX;
        public Point stred;

        public int sirka;
        public int vyska;

        public int plocha;
        public List<Point> pixely = new List<Point>();

        public Shluk()
        { }
        public Shluk(int id)
        {
            this.id = id;
        }
        public void AddPix(int x, int y)
        {
            this.pixely.Add(new Point(x, y));
        }
        public void AddPix(Point p)
        {
            this.pixely.Add(p);
        }
        public void AddPixs(List<Point> _pixely)
        {
            this.pixely = _pixely;
            

            GetMinMax();
            SpocitatPlochu();
            SpocitatRozmery();
            SpocitatStred();
            
        }
        public void SpocitatPlochu()
        {
            plocha = pixely.Count();
        }
        public void SpocitatRozmery()
        {
            this.sirka = Math.Abs(maxX.X - minX.X);
            this.vyska = Math.Abs(maxY.Y - minY.Y);
        }
        public void SpocitatStred()
        {
            int y = ((minY.Y - maxY.Y) / 2) + maxY.Y;
            int x = ((maxX.X - minX.X) / 2) + minX.X;
            this.stred = new Point(x, y);
        }
        public void GetMinMax()
        {
            if (pixely.Count() > 0)
            {
                minX = pixely[0];
                maxX = pixely[0];
                minY = pixely[0];
                maxY = pixely[0];

                for (int i = 1; i < pixely.Count(); i++)
                {
                    if (pixely[i].X < minX.X)
                    {
                        minX = pixely[i];
                    }
                    if (pixely[i].X > maxX.X)
                    {
                        maxX = pixely[i];
                    }
                    if (pixely[i].Y < minY.Y)
                    {
                        minY = pixely[i];
                    }
                    if (pixely[i].Y > maxY.Y)
                    {
                        maxY = pixely[i];
                    }
                }
            }
        }

    }