tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
388
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    OliWan OliWan ist offline Mitglied Bronze
    Registriert seit
    Aug 2003
    Ort
    Schwerte
    Beiträge
    39
    Hi Coders!

    Ich suche eure Hilfe!

    Ich habe ein Array von Points. Dieses möchte ich gern in irgendeinem
    dafür geeignetem Element innerhalb eines WinForms zeichen - und zwar
    nicht alle auf einmal, sondern step by step, bzw. Eintrag für Eintrag.

    Im Moment bin ich soweit:

    Ich habe eine XML Datei mit Strichdetails. Jeder Sample eines Striches
    hat eine X-Koordinate, eine Y-Koordinate und einen Unix Timestamp der
    Entstehung. z.B.
    x y Time
    <Stroke>
    806 6228 1149760002237
    806 6227 40
    807 6227 66
    808 6227 80
    808 6227 93
    808 6227 106
    809 6227 120
    809 6227 133
    809 6227 146
    809 6226 160
    808 6225 200
    807 6224 226
    807 6224 240
    805 6222 253
    801 6216 266
    </Stroke>

    Nun will ich diesen Strich so "nachmalen" dass er auch in Relation zu seinen Zeitabständen entsteht (Die letzte Zahl in jeder Reihe sind die Millisekunden Abstand zum vorangegangenem Sample - also die eigentliche Wartezeit)


    Ich lese die Strokes ein und fülle Sie in eine ArrayList. Immer wenn ein neuer Strich anfängt, füge ich einen Platzhalter (-100) ein. Wenn alle Strokewerte im Array sind,
    repainte ich eine PictureBox.

    Hier die Paintmethode mit Kommentaren
    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
    34
    35
    36
    37
    38
    39
    40
    41
    
        private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
            {
                e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
     
                if (oli.Equals("yes")){ // oli ist nur auf yes, wenn der "malen" Button angeklickt wird 
    //          MessageBox.Show("Start");
                SolidBrush brush = new SolidBrush(Color.Blue);
                System.Drawing.Pen pen0 = new System.Drawing.Pen(brush);
                pen0.Width=1;
                pen0.Alignment = PenAlignment.Center;
     
                ArrayList xyz = new ArrayList();
                int loop=0;
                foreach (PointF tp in list){// list ist die ArrayList mit den einzelnen Werten
                if (loop>0){
                if (tp.X>0){
                xyz.Add(tp);
                }else{
                PointF[] ptlast = (PointF[])xyz.ToArray(typeof(PointF));
     
                if (ptlast.Length>1){
                    e.Graphics.DrawLines(pen0,ptlast);
                }else{
                 e.Graphics.FillRectangle(brush,ptlast[0].X,ptlast[0].Y,1,1);
                }
     
     
                xyz.Clear();
     
                }
     
                }
                loop++;
                }
     
     
     
     
     
            }// if oli.equals=yes
            }//void

    Leider hakelt das total bei mir und es entsteht nicht wirklich jedes Sample einzeln. Irgendwie springt das Update immer um x-Samples und ich kriege komplette Zeichen und nicht eine entstehende Zeichnung der Zeichen?

    Hat jemand von euch ne Idee? Evtl. ist PictureBox nicht geeignet.

    Hope for help
    OliWan

    May the source be with your
     

  2. #2
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Du zeichnest auch alles auf einmal und wartest die Zeitpunkte nicht ab. Das was dir fehlt ist ein Thread.Sleep(Millisekunden).
     

  3. #3
    OliWan OliWan ist offline Mitglied Bronze
    Registriert seit
    Aug 2003
    Ort
    Schwerte
    Beiträge
    39
    Hi Norbert!

    Vielen Dank für die schnelle Antwort und sorry, aber da hab ich wohl nicht
    gut genug gepostet.

    Beim füllen meines Array, rufe ich ständig die pictureBox1.Refresh() auf. Diese wiederum
    malt ständig den kompletten Inhalt des Array, den ich im loop immer um eine Koordinate erweitere (denn sonst sehe ich immer nur Pixelweise und die "alten" Zeichen verschwinden)

    Bevor ich refresche, habe ich ein

    Thread.Sleep(Convert.ToInt32(sampleparts[2])/10);



    ... OliWan
     

Ähnliche Themen

  1. langsam zeichnen
    Von ivanoo im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 21.01.10, 10:09
  2. Explorer langsam, wenn ein Netzlaufwerk langsam
    Von Coalminer im Forum Microsoft Windows
    Antworten: 0
    Letzter Beitrag: 15.06.06, 15:58
  3. USB langsam
    Von voelzi im Forum Linux & Unix
    Antworten: 2
    Letzter Beitrag: 07.04.06, 11:44
  4. Säulen Zeichnen, Drachen zeichnen
    Von RudeJava im Forum Photoshop
    Antworten: 34
    Letzter Beitrag: 17.07.05, 09:34
  5. CPU zu langsam...
    Von MichiStroi im Forum .NET Archiv
    Antworten: 1
    Letzter Beitrag: 20.03.05, 10:32