c# Polynom in Raster wandeln

amArsch

Grünschnabel
Hallo,

ich muss momentan für ein projekt folgendes tun.

also ich möchte ein beliebiges shape (polynom) in ein raster transformiern / convertieren.
dabei sind mir natürlich die koordinaten der einzelnen zellen wichtig welche innerhalb des polynoms sind. (brauch ich dann für weitere funktionen)
da ich mich jedoch nicht gut mi c# auskenne und auch nicht so gut mit .NET wüsste ich gerne ob es bereits eine solche funktionalität gibt. (man muss ja nicht alles neu erfinden)
oder kennt jemand eine geeignete open source lösung?

wenn es keine open source lösung gibt und auch nicht im .NET Framework nichts geeignetes vorhanden ist,
wie gehe ich nun an die Sache heran?
und welche Klassen / Verweise benötige ich?

im prinzip das hier
http://webhelp.esri.com/arcgisdesktop/9.2/published_images/Resolution_and_feature.gif

Danke
amArsch :p
 
gibt bestimmt eine paar libs,
aber sollte auch per Hand nicht so schwer sein,
dein Bild besteht ja aus Pixel, ist ja nichts anderes wie ein Raster.
über die Methode:
Code:
GetPixel(x, y)
kannst du sämtliche Informationen, aus den Bild-Pixel auslesen, (einzelne Farben, Sättigung, usw).
Da du jetzt ein "gröberes" Raster haben willst, als das dir die Pixel selbst bieten, musst du entweder:
- Die Farbinformation eines Rechtecks (also die Pixel von x = a bis x = a+10 und von y = b bis y b+10) zusammen addieren und dann den Mittelwert bilden, das würde auch Abstufungen der Farbe am Randbereich zulassen.
oder
- Die Farbinformation im Rechteck zusammen addieren und dann über einen Schwellenwert entscheiden ob die Farbe ausreichen vorhanden ist oder nicht.

diese Information Zeichnest du dann in ein neues Bild

ich hoffe ich konnte die helfen.
 
Erstmal danke FJK,

leider war es nicht das was ich gesucht habe.
Ich wollte einfach aus gegebenen Punkten ein polygon erzeugen, dieses mit möglichst wenig aufwand in ein raster einteilen und diese zellen dann verwenden zum weiter zu arbeiten.
Ich soll nämlich dieses "Gebiet" möglichst gleichäßig und effizient einteilen... also in gleich große stücke einteilen. Daher war mein Ansatz es in viele zellen zu zerlegen und dann
je nachdem wie viele "Teilgebiete" es werden sollen zusammenfassen bzw. einzuteilen.

Aber evtl Hilft mir die Funktion später weiter. Wusste ich bisher auch nicht das das möglich ist.

Habe im .NET Framework leider keine konvertierungsmethode gefunden. Daher die Idee ob es dafür etwas im open source bereich gibt.
Falls jemand weiß ob es doch im .NET Framework etwas gibt oder ne open source möglichkeit kennt würde ich mich über einen Hinweis sehr freuen.

Falls nicht habe ich es mir so gedacht...

1. ich ermittel die punkte die am weitesten recht, link, oben und unten sind... so hätte ich dann die grenzen meines rasters.
2. ich generiere eine 2dim list mit zellen die mein raster komplett abdecken (größe muss angegeben werden) .... je kleiner, desto genau wird das polygon natürlich abgedeckt.
3. ich durchlauf jede zelle und frage ob der zellenmittelpunkt im polygon drin is (erst mal so "ungenau")
4. die zellen die drin sind speicher ich mir wieder in einer liste und kann anschließend damit arbeiten.

Ist die idee gut oder eher aufwändig zu realisieren?

Gruß
amArsch
 
Das dürfte einfach sein. Im Drawing2D-Namespace findest du beispielsweise die GraphicsPath-Klasse. Diese Klasse stellt eine Linie dar, die du aus Geraden, Kurven, Splines, etc. zusammenbasteln kannst. Wenn du die Linie dann dort enden lässt, wo sie anfängt, dann hast du eine Fläche. Mit der IsVisible-Methode der GraphicsPath-Klasse kannst du prüfen, ob ein Punkt innerhalb deiner Fläche oder außerhalb deiner Fläche liegt.

Ich weiß aber nicht ob es reicht einfach zu überprüfen, ob der Mittelpunkt der Rasterfläche in der Fläche liegt. Ich habe dazu ein Bild angehängt um das zu verdeutlichen: orange sei hier zur Fläche zugehörig, weiß soll außerhalb der Fläche liegen und das Bild stellt einen einzigen Rasterpunkt dar. Wenn du so eine Fläche hast, die den Rasterpunkt übermäßig ausfüllt, dann sollte der Rasterpunkt orange werden, obwohl der Mittelpunkt hier nicht in der Fläche liegt.
 

Anhänge

  • flaeche.png
    flaeche.png
    289 Bytes · Aufrufe: 158
Zuletzt bearbeitet:
Hey danke Shakie für die schnelle antwort.

ich glaube, es könnte sein, evtl, ich hoffe sehr das es das ist was ich brauche...
bisher scheint es zu funktionieren. merci vielmals

ja ich weiß schon das das mit der mitte der zelle nicht die optimale lösung ist...
wäre auch nur probeweise... was genaueres hätte ich mir dann ggf. schon noch ausgedacht.

Gruß
amArsch
 
Für die Erstellung deines Polygons kannst du auch die Methode AddPolygon verwenden. Und mit GetBounds() ermittelst du dann das umschließende Rechteck. Ob ein Punkt innerhalb deines Polygons ist, kannst du ermitteln, indem du prüfst, ob er die Füllfarbe hat.
Wenn du weißt, wie viele Zellen du hast, kannst du auch berechnen, wie gross eine Teilfläche sein muss. Um sie zu berechnen, kannst du einen Wachstumsalgorithmus verwenden. Du nimmst eine Zelle als Keim für deine neue Fläche und nimmst nacheinander jeweils die Nachbarzellen hinzu, welche die meisten Flächenzellen oder Außenzellen als Nachbarn haben. So bekommst du auch eine möglichst gerade Grenzlinie.
 
Zurück