Προς το περιεχόμενο

Γραφικά με την Visual Basic


DataMan

Προτεινόμενες αναρτήσεις

Δημοσ.

Alcoholic,

Γνωρίζω τι κάνει και πως συντάσεται η PolyLine. Στο Project μεταξύ άλλων χρησιμοποιώ και τις Polygon, PolyPolygon.

Θα αλλάξω την Line με σχεδίαση με την PolyLine και βλέπουμε...

 

Ως αναφορά τον alkisg, δεν λέω ότι αυτά που γράφει είναι λάθος, αλλά πιστεύω ότι ενοείται ότι προσπαθούμε πάντα πρώτα να μειώσουμε τον όγκο πληροφοριών (πλήθος γραμμών) και κατόπιν να αντιμετωπίσουμε τα άλλα θέματα.

Επίσης σχετικά με την μέθοδο doublebuffering ανέφερα πιο πάνω προσωπικά δεν έχω ασχοληθεί και εκφράζω ότι έχω ακούσει

Δημοσ.
Δεν είμαι σαφής?
Αυτό είναι υποκειμενικό και δεν μπορώ να σου απαντήσω, μπορώ μόνο να πω ότι εγώ δεν είχα καταλάβει ότι ήθελες ντε και καλά να ζωγραφίζεις 20000 γραμμές κάθε φορά. Συνήθως γίνεται optimization.

Επίσης, ακόμα δεν έχω καταλάβει αν οι γραμμές είναι "σταθερές" ή αλλάζουν συντεταγμένες.

 

Πάντως αν θέλεις μόνο να κάνεις zoom in, zoom out και panning τότε ΔΕΝ χρειάζεται να κάνεις clear το Paintbox. Το PaintBox απ' ότι βλέπω στην msdn υποστηρίζει WMF μορφή, και τα Windows MetaFiles υποστηρίζουν zooming και panning.

 

Στην αντίθετη περίπτωση (αν π.χ. θες να προσθέτεις και να αφαιρείς γραμμές αρκετές φορές το δευτερόλεπτο) τότε δεν σου κάνει το PaintBox. Το PaintBox είναι σχεδιασμένο να αποθηκεύει αυτά που του δίνεις (χάνοντας έτσι πολύ σε ταχύτητα), ενώ εσύ θες διαφορετικά πράγματα κάθε φορά. Αν λοιπόν πας σε GDI API θα δεις φοβερή διαφορά σε ταχύτητα, αλλά θα πρέπει να ξαναζωγραφίζεις την φόρμα σε κάθε WM_DRAW (δηλαδή να είναι ownerdrawn).

 

Θα βοηθούσε πιστεύω ένα screenshot με το output του προγράμματος.

Δημοσ.
Αυτό είναι υποκειμενικό και δεν μπορώ να σου απαντήσω' date=' μπορώ μόνο να πω ότι εγώ δεν είχα καταλάβει ότι ήθελες ντε και καλά να ζωγραφίζεις 20000 γραμμές κάθε φορά. Συνήθως γίνεται optimization.

Επίσης, ακόμα δεν έχω καταλάβει αν οι γραμμές είναι "σταθερές" ή αλλάζουν συντεταγμένες[/quote']

Σωστό αυτό δεν το είχα τονίσει. Χρησιμοποιώ την μέθοδο της Line και του επανασχεδιασμού γιατί έχω συγκεκριμένες συντεταγμένες και αυτές αλλάζουν ανάλογα με το zoom.

 

Στην αντίθετη περίπτωση (αν π.χ. θες να προσθέτεις και να αφαιρείς γραμμές αρκετές φορές το δευτερόλεπτο) τότε δεν σου κάνει το PaintBox. Το PaintBox είναι σχεδιασμένο να αποθηκεύει αυτά που του δίνεις (χάνοντας έτσι πολύ σε ταχύτητα), ενώ εσύ θες διαφορετικά πράγματα κάθε φορά. Αν λοιπόν πας σε GDI API θα δεις φοβερή διαφορά σε ταχύτητα, αλλά θα πρέπει να ξαναζωγραφίζεις την φόρμα σε κάθε WM_DRAW (δηλαδή να είναι ownerdrawn).

Θέλεις να μου δώσεις περισσότερα στοιχεία?

Δημοσ.

Επισυνάπτω ένα sample project που χρησιμοποιεί memory DC.

Ο κώδικας στο module δεν είναι όλος δικός μου, αλλά είναι αρκετά εύκολος (θα ήταν καλύτερα με class module, αλλά...).

Έβαλα και κάποια σχόλια για επεξηγήσεις.

Στο δικό μου PC, 100.000 γραμμές σε 1 sec.

BitmapTest.zip

Δημοσ.
Επισυνάπτω ένα sample project που χρησιμοποιεί memory DC.

Ο κώδικας στο module δεν είναι όλος δικός μου' date=' αλλά είναι αρκετά εύκολος (θα ήταν καλύτερα με class module, αλλά...).

Έβαλα και κάποια σχόλια για επεξηγήσεις.

Στο δικό μου PC, 100.000 γραμμές σε 1 sec.[/quote']

 

Τελικά η απάντηση ήταν αυτή.

Το Project μου έκανε περίπου 6 δευτερόλεπτα για να φορτώσει και με την μέθοδο αυτή είναι λιγότερο από ένα.

Διαπίστωσα επίσης ότι αλλάζωντας κάρτα γραφικών με τον προηγούμενο τρόπο δεν είχα διαφορά στην ταχύτητα, ενω με αυτόν έχω.

 

UserXP ευχαριστώ εσένα και όλους τους φίλους που απάντησαν.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...