Laden...

Forenbeiträge von Proxymaster500 Ingesamt 4 Beiträge

27.08.2015 - 17:31 Uhr

Je nachdem wo du deine Grafik vorliegen hast kannst du einfach über .Width /2 und .Height /2 die Info auslesen.

MfG

24.08.2015 - 15:35 Uhr

Hab das Ganze jetzt mit kleinen Umwegen über die GraphicsPath-Klasse gelöst. Wobei ich das Inside/Outside-Problem mit einem neumalen des Polygons in Gelb umgangen habe. Hier der Code falls es jemand interessiert:

                    Bitmap orginal = new Bitmap(iObjectImg);
                    Image color = new Bitmap(pbObject.Width, pbObject.Height);
                    Graphics g = Graphics.FromImage(color);
                    g.FillRectangle(polyBrush, 0, 0, pbObject.Width, pbObject.Height);

                    Image blank = new Bitmap(pbObject.Width, pbObject.Height);
                    Graphics gr = Graphics.FromImage(blank);
                    GraphicsPath polyPath = new GraphicsPath();
                    polyPath.AddPolygon(NewPolygon.ToArray());
                    gr.SetClip(polyPath);
                    gr.DrawImage(color, 0, 0);
                    Bitmap polyYellow = new Bitmap(blank);

                    for (int xAuslesen = 1; xAuslesen < pbObject.Width; xAuslesen++)
                    {
                        for (int yAuslesen = 1; yAuslesen < pbObject.Height; yAuslesen++)
                        {

                            if (polyYellow.GetPixel(xAuslesen, yAuslesen) == Color.FromArgb(255, 255, 255, 0))
                            {
                                Color pixelcolor = orginal.GetPixel(xAuslesen, yAuslesen);
                                ColorR += pixelcolor.R;
                                ColorG += pixelcolor.G;
                                ColorB += pixelcolor.B;
                                NumberPixel++;
                            }


                        }
                    }

MfG

24.08.2015 - 13:46 Uhr

Danke für die Rückmeldung!

Bitmap habe ich auch für die Auswertung der Rechteckauswahl im Einsatz, werde aber nochmal die Möglichkeiten dieser checken.

MfG

Edit: @Cat Vielen Dank für den Input!

24.08.2015 - 13:15 Uhr

Hallo,

Ich habe ein kleines Programm geschrieben mit dessen Hilfe man die Durchschnittsfarbe eines bestimmten Bereichs eines Bildes ermitteln kann. Dazu soll es verschiedene Möglichkeiten zur Bereichsauswahl geben.
Eine Rechteck- und Kreisauswahl ist bereits integriert und funktionsfähig, zusätzlich dazu soll allerdings noch eine Polygonauswahl möglich sein.

"Grafisch" wurde diese bereits integriert sodass das Polygon vom User gezeichnet werden kann. Doch ich weiß nicht wie ich diese Auswahl auswerten, also die Farbinformation der einzelnen Pixel herausbekommen kann.

Hier noch das Snippet, welches für das Zeichnen des Polygons verantwortlich ist:


//Mouse Down der PictureBox
if (NewPolygon != null)
                {
                    if (e.Button == MouseButtons.Right)
                    {
                        Finish = true;
                    }
                    else
                    {
                        NewPolygon.Add(e.Location);
                    }
                }
                else
                {
                    NewPolygon = new List<Point>();
                    NewPoint = e.Location;
                    NewPolygon.Add(e.Location);
                }

//MouseMove
 if (NewPolygon == null) return;
                NewPoint = e.Location;
                pbObject.Invalidate();
//Paint Event
 e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;


                    
                    if (NewPolygon != null)
                    {
                        
                        if (NewPolygon.Count > 1)
                        {
                            e.Graphics.DrawLines(darkbluepen, NewPolygon.ToArray());
                        }

                        
                        if (NewPolygon.Count > 0 && Finish != true)
                        {
                            e.Graphics.DrawLine(bluepen, NewPolygon[NewPolygon.Count - 1], NewPoint);
                        }

                        if (Finish == true)
                        {

                            e.Graphics.DrawLine(darkbluepen, NewPolygon[NewPolygon.Count - 1], NewPolygon[0]);
                            e.Graphics.FillPolygon(selectionBrush, NewPolygon.ToArray());
                            NewPolygon.Clear();
                            NewPolygon = null;

                        }
                    }

Hat jemand eine Idee wie ich an Auswahl komme?

Vielen Dank im Voraus 😃

Mit freundlichen Grüßen