Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

C#,racunanje povrsine proizvoljne konture

[es] :: .NET :: C#,racunanje povrsine proizvoljne konture

[ Pregleda: 1964 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

djomlacar
Student

Član broj: 187268
Poruke: 23
*.dynamic.sbb.rs.



Profil

icon C#,racunanje povrsine proizvoljne konture02.09.2011. u 20:42 - pre 153 meseci
pozdrav svima,interesuje me da li neko zna metodu za izracunavanje povrsine proizvoljne konture u C#-u?mala napomena,metod racunanja preko bojenja pixela i zatim brojanja istih,u prilogu,je primenjen i radi,potreban mi je neki drugi metod.hvala unapred

Code:

        private void CalculateArea()
        {
            int totalArea = 0;
            int x = this.Location.X + 20;
            int y = this.Location.Y + 20;

            for (int i = pnlDrawArea.Location.X + x; i < pnlDrawArea.Size.Width; i++)
            {
                for (int j = pnlDrawArea.Location.Y + y; j < pnlDrawArea.Size.Height; j++)
                {
                    if (GetColor(new Point(i, j)).Name == "ff000000")
                    {
                        totalArea++;
                    }
                }
            }

            fldArea.Text = totalArea.ToString();
        }

        private Color GetColor(Point position)
        {
            using (var bitmap = new Bitmap(1, 1))
            {
                using (var graphics = Graphics.FromImage(bitmap))
                {
                    graphics.CopyFromScreen(position, new Point(0, 0), new Size(1, 1));
                }
                return bitmap.GetPixel(0, 0);
private void btnCalculate_Click(object sender, EventArgs e)
        {
            //System.Windows.Shapes.Polygon
            CalculateArea();
        }

        private void btnIzracunajPrekoSlike_Click(object sender, EventArgs e)
        {
            Graphics myGraphics = this.CreateGraphics();
            Size s = this.Size;
            Bitmap memoryImage = new Bitmap(s.Width, s.Height, myGraphics);
            Graphics memoryGraphics = Graphics.FromImage(memoryImage);
            memoryGraphics.CopyFromScreen(this.Location.X, this.Location.Y, 0, 0, s);

            memoryImage.Save(@"C:\Polygon\Polygon.bmp");
            memoryGraphics.Save();

            Bitmap bmpFromFile = new Bitmap(@"C:\Polygon\Polygon.bmp");

            int area = 0;
            //memoryImage.GetPixel(0, 0)

            for (int i = 0; i < bmpFromFile.Width; i++)
            {
                for (int j = 0; j < bmpFromFile.Height; j++)
                {
                    if (bmpFromFile.GetPixel(i, j) == Color.Black)
                    {
                        area++;
                    }
                }
            }

            fldArea.Text = area.ToString();
        }

 
Odgovor na temu

Boris B.
Ljubljana

Član broj: 213615
Poruke: 286
*.zaslon-telecom.si.



+14 Profil

icon Re: C#,racunanje povrsine proizvoljne konture05.09.2011. u 10:02 - pre 153 meseci
A kako je definisana ta kontura? Kao bitmap? Good luck...

Ako ti je ta kontura poligon (kao što imaš tamo komentar System.Windows.Shapes.Polygon) onda ti ovaj kod rešava stvar:

Code (csharp):


        private static double GetPolyArea(Polygon poly)
        {
            double area = 0;

            for (var i = 0; i < poly.Points.Count; i++)
            {
                var j = (i + 1) % poly.Points.Count;
                area += poly.Points[i].X * poly.Points[j].Y;
                area -= poly.Points[j].X * poly.Points[i].Y;
            }

            return area / 2;
        }

 


Trebalo mi je ovo za računanje centroida poligona pre nekih par godina...
if it walks like a duck and quacks like a duck, it could be a dragon doing a duck
impersonation.
 
Odgovor na temu

[es] :: .NET :: C#,racunanje povrsine proizvoljne konture

[ Pregleda: 1964 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.