tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
277
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Topia Topia ist offline Mitglied Bronze
    Registriert seit
    Feb 2008
    Beiträge
    48
    Hallo,

    ich wollte fragen, ob es möglich wäre z.b einen Graphpath erzeugen mit einer Linie, ellips usw
    und an dieser Linie die ja jetzt sich von den anderen unterscheidet etwas bewegen zu lassen z.b eine picturebox wo sich ein Auto Bild drin befindet.

    Danke, im vorraus!
     

  2. #2
    Topia Topia ist offline Mitglied Bronze
    Registriert seit
    Feb 2008
    Beiträge
    48
    Weiss keine ne antwort?
     

  3. #3
    PhoenixLoe PhoenixLoe ist offline Mitglied Gold
    Registriert seit
    Apr 2005
    Beiträge
    120
    Hallo Topia,

    vor diesem Problem stand ich auch schon einmal. Ich kenne bis heute keine Möglichkeit, die interpolierten Daten für Kurven, Ellipsen etc. aus einem GraphicsPath-Objekt zu extrahieren. Zwar kannst du einige Punkte per PathPoints-Eigenschaft ermitteln, allerdings sind das nur einige Referenzpunkte. Somit kann man den Pfad nicht pixelweise ansprechen.

    Die einzige Möglichkeit, die ich sehe, ist die eigene Berechnung der komplexen Formen bzw. eine eigene GraphicsPath-Klasse, die diese Funktionalität implementiert. Alternativ kannst Du den Pfad aus einzelnen kleinen Linien zusammensetzen, was aber unflexibel und mit Sicherheit genauso aufwändig ist wie die erste Lösung.

    Gruß
    PhoenixLoe
     

  4. #4
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    GraphicsPath auf ein Image zeichnen und dann über die GetPixel Methode (in einer Schleife von oben nach unten durchlaufen) des Image den Farbwert prüfen.
    Wenn Farbe zum Beispiel Schwarz dann Punkt in einer Liste merken.

    Zum Schluss kannst du dann die Punkte in der Liste abfahren

    In wie weit das performant ist kann ich aber nixs zu sagen.
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  5. #5
    Topia Topia ist offline Mitglied Bronze
    Registriert seit
    Feb 2008
    Beiträge
    48
    Wie realisier ich das den jetzt in C#. Hab erst vor ein paar Wochenn angefangen:
    Hier mein Testlauf:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    
     
    for (int ij = 1; ij < 5; ij++)
                {
               
     
                    Bitmap neu = (Bitmap)Image.FromFile(@"C:\Users\bsp\Desktop\st58sss52.jpg");
     
                    int width = neu.Width;
                    int height = neu.Height;
     
                    Color cor = neu.GetPixel(ij++, ij++);
                   string dd = cor.ToString();
                    
                    int dds = Convert.ToInt32(dd);
     
     
                    int[] pixel = new int[1000];
                    for (int i = 1; i < 5; i++)
                    {
                        pixel[i] = dds;
     
     
     
                        int tt = dds;
                        string ii = Convert.ToString(dds);
                        richTextBox1.Text = ii;
                    }
     
     
                    }
     
                    
                }
    Ist sicherlich falsch, nur ich habs eben bersucht
    Ich krieg irg nicht die Umwandlung hin bzw damit cor als pixel[i] = dds; fungieren kann.
     

  6. #6
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    Ein Pixel besteht aus 2 Werte X und Y das heißt du brauchst auch 2 Schleifen.
    Wie weit deine Schleife laufen soll weißt du aus den Bildangaben (Width und height)

    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    List<Point> listPoints=new List<Point>();
    using(Bitmap bmp= (Bitmap)Image.FromFile(@"C:\Users\bsp\Desktop\st58sss52.jpg"))
    {
       for(int x = 0; x < bmp.Width; x++) //laufe von Links nach Rechts
       {
          for(int y = 0; y < bmp.Height; y++) //laufe von oben nach unten
          {
                Color farbe = bmp.GetPixel(x, y);
                if(farbe == Color.Black)
                     listPoints.Add(new Point(x, y));
          }
       }
    }

    Der using Block besagt übrigens das nach ende des Blockes der Speicher wieder geräumt werden kann für das Bitmap Objekt.
    (kannst du in allen Objekten verwenden die die Schnittstelle IDisposable verwenden)

    Am besten du testest das mit einem gezeichneten Bild aus Paint
    (ev. RGB Werte für Color Objekt selbst setzen Color.SetARGB [oder so], wobei Schwarz müsst ja eigentlich Schwarz sein ).

    Wenn das funktioniert kann ich dir zeigen wie man zur Laufzeit ein Bitmap Objekt erstellt und füllen kann mit GraphicPath
    Aber nu geh ich erstma ins Bett
    Oder du schaust dir den Thread an: http://www.tutorials.de/forum/net-gr...bei-paint.html
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  7. #7
    PhoenixLoe PhoenixLoe ist offline Mitglied Gold
    Registriert seit
    Apr 2005
    Beiträge
    120
    Hallo Spyke,

    die Idee an sich ist nicht schlecht. Allerdings hast Du dann das Problem, dass die Auflistung nicht sortiert ist. Das Objekt müsste im Moment spaltenweise von oben nach unten springen, je nachdem, wie der Pfad aufgebaut ist
    Da mir kein Algorithmus bekannt ist, eine Liste von Punkten so zu sortieren, dass der ursprüngliche Pfad wieder herauskommt, müsste man sich vielleicht überlegen, wie man ihn anders einlesen kann.
    Ich könnte es mir so vorstellen, dass man einen Startpunkt sucht und von dort aus jeden Pixel in einem 9x9-Feld auf einen Nachbar-Pixel überprüft, der noch nicht in der Liste enthalten ist. Das Ganze rekursiv und man sollte doch irgendwie den Pfad erhalten. Da das einen erheblichen Mehr-Aufwand darstellt (im Extremfall die 81-fache Datenmenge ), könnte man - falls es funktioniert - evtl. über den Einsatz des BitmapData-Objekts nachdenken, um wenigstens keine Zeit für das Einlesen des Pixel-Farbwerts zu verlieren und die Sache so ein wenig zu beschleunigen.

    Wie gesagt, ich habe keine Ahnung, ob es funktioniert. Wenn ich Zeit habe, probiere ich's mal aus. Ansonsten würde ich meine andere Lösung wieder aufgreifen und die Methoden für Linien und Kurven selbst implementieren. Im Internet gibt es zahlreiche Tutorials für die mathematische Berechnung von Bezièr und Konsorten

    Gruß
    PhoenixLoe
     

  8. #8
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    Du hast ja dann die Liste der Punkte und durchläufst einfach die Liste. Fängst mit dem ersten Punkt an und suchst seinen nächsten Nachbarn.
    Das solange weiter mit den nächsten Punkten rekursiv bis die Liste leer ist.
    Auf den ersten Blick würde ich sagen könnte sich dafür MergeSort anbieten.
    (Klingt eigentlich fast wie deine Idee oder . Es ist spät ich bin Müde )
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  9. #9
    PhoenixLoe PhoenixLoe ist offline Mitglied Gold
    Registriert seit
    Apr 2005
    Beiträge
    120
    Hallo Spyke,

    um ehrlich zu sein: das ist tatsächlich genau dieselbe Idee, die ich auch hatte. Aber schön, dass wir einer Meinung sind
    MergeSort würde sich anbieten, wenn man die Liste unsortiert einliest. Wenn man's allerdings gleich sortiert einliest, kann man sich die nachträgliche Sortierung und damit Rechenzeit sparen. Im Prinzip aber genau das gleiche System.

    Ich will jetzt allerdings auch nochmal auf die Person zurückkommen, die den Thread ursprünglich aufgemacht hat
    @Topia: Da Du erst vor ein paar Wochen mit C# angefangen hast, weiß ich nicht, wieviel Du von dem verstanden hast, was in den letzten zwei Antworten besprochen wurde. Vielleicht sagst Du mal, ob Du noch einmal zusätzliche Erläuterungen benötigst oder ob Du Dich erst einmal selbst an dem Problem versuchen willst.

    Gruß
    PhoenixLoe
     

Ähnliche Themen

  1. Frage zu Point by Point Modeling
    Von Adi | tmine im Forum Cinema 4D
    Antworten: 4
    Letzter Beitrag: 26.06.07, 22:58
  2. Der Maus Folgen
    Von DelphiDel im Forum Flash Plattform
    Antworten: 2
    Letzter Beitrag: 16.10.05, 16:20
  3. Link folgen
    Von RMI_17 im Forum Java
    Antworten: 1
    Letzter Beitrag: 25.08.05, 14:04
  4. Antworten: 18
    Letzter Beitrag: 31.05.05, 06:58
  5. Problem mit reactor "point to point" helper
    Von ardworx im Forum 3D Studio Max
    Antworten: 2
    Letzter Beitrag: 29.03.05, 04:04