Grafik laden oder "malen" ?
Übersicht

![]() |
GinaBetreff: Grafik laden oder "malen" ? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
ich möchte zu Übungzwecken auf den Bildschirm ca. 300 bunte Kugeln bzw. Kreise (Durchmesser 32) bringen und habe dazu folgende grundsätzliche Frage: Ist es bei einer solchen Anzahl performancemäßig besser, diese von B3D "malen" zu lassen, oder dafür verschiedene Grafiken zu laden? Ich muss sie ja später auch einzeln ansprechen können, falls das zu der Frage eine Rolle spielt. Vielen Dank, Gina. |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn es ja zum üben ist.... probier beide Varianten und ermittle die schnellere ... ![]() Viel Erfolg. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Gina |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm..., naja, bei mir merke ich da keinen Unterschied... ![]() Wie kann ich das messen? |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bevor du die erste variante startest merkst du dir den Inhalte von Millisecs(). dann lässt du deine 300 Kreise sagen wir mal 10000 mal einzeichnen. dann merkst du dir nochmals Millisecs und bildest die Differenz ->Zeit in Millisekunden zum ausführen.
Bei der 2en Variante genau das selbe. Wer weniger msecs braucht ist schneller. Kleiner Tip: mache nachdem deine Gfx geladen sind eine pause mit delay von 2-3 sekunden (delay 3000), damit evtl. Dateioperationen das ergebnis nit trüben und der Grafikmodus korrekt gesetzt ist. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Gina |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ahh, ok danke. Das mache ich dann mal... | ||
![]() |
Gina |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sooo, hier mal meine Ergebnisse:
Bei 100 Durchläufen (10000 hat mir zu lange gedauert... ![]() "malen" ca. 11300 Millisekunden und zum laden der Grafiken ca. 30100 Millisekunden... ![]() Nochmal zum Verständnis: Er läuft bei mir eine verschachtelte Schleife durch, in der er immer die nächste Position ermittelt und innerhalb dieser wählt er per Zufall eine von 6 Farben bzw. Grafiken. Eine Grafik hat jeweils 2 KB. Es wird hier also 300x eine Grafik geladen (und wieder entladen)... Das mit dem 300x laden war also Absicht... ![]() Vielen Dank nochmal, Gina. PS: der Vollständigkeit halber die dritte Variante: Habs nochmal umgebaut und nun die Grafiken einmal am Anfang geladen und dann nur noch mit DrawImage in der Schleife eingefügt. Zu meiner Überraschung dauerte das dann nur noch ca. 1665 Millisekunden. Mal ne andere Frage: Wenn ich die Kreise "malen" lasse, ist der Bildschirmhintergrund schwarz (also standard). Wenn ich die Grafiken lade, dann wird er rot. Woran liegt das? Hab nix verändert... Gina. |
||
x.Force |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ähm heisst das du hast davor das laden in der schleife gehabt O_O | ||
AMD Athlon XP 2000+ | 1024mb DDR-Ram | Asus Radeon 9600XT | BENQ FP757 17°Zoll TFT Was kümmert mich mein Geschwätz von gestern? (Konrad Adenauer) -.- |
![]() |
Bfox |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vllt hast du bei deiner Grafik einen roten Hintergrund also musst du die Tranzperenz mit:Code: [AUSKLAPPEN] MaskImage, r, g, b
Auf rot stellen also: Code: [AUSKLAPPEN] MaskImage, 255, 0, 0
Geht doch ganz einfach! 8) |
||
Glauben ist Mangel an Wissen! |
![]() |
Gina |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ x.Force
jup, hatte ich. War ja wie gesagt Absicht, da ich den Vergleich zwischen "malen" und Grafik laden und zeichnen haben wollte. Dass einmal Grafik laden und dann 300x zeichnen schneller ist, wußte ich ja, allerdings wußte ich nicht, wieviel schneller. Das hatte mich etwas überrascht ![]() @ Bfox Eigentlich hab ich bei der Grafik einen schwarzen Hintergrund gewählt, weil ich annahm, dass die Transparenz default auf schwarz ist. oder ist das nicht so? Ich probiere mal etwas mit MaskImage rum. Danke dir. Gina. |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist schon richtig, schwarz ist ungeändert die Transparenzfarbe. Wie es aber zu Deinem 'Rot-Problem' kommt läßt sich so schlecht sagen. Ein bisschen Quellcode vielleicht? | ||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
hab da mal ebend einen speed tester geproggt:
mit bilder und mit oval ist schon so einiges was an Speed bei oval drauf geht Allerdings fressen die Bilder auch ca. 15 MB GrafikspeicherCode: [AUSKLAPPEN] Graphics 800,600,32,1
Menge = 300 Dim bild(Menge) ; erstellt die Bilder For t= 0 To Menge bild(t) = CreateImage (32,32) SetBuffer ImageBuffer(bild(t)) Color Rand(0,$ff),Rand(0,$ff),Rand(0,$ff) Oval 0,0,32,32 Next SetBuffer BackBuffer() Delay 1 timer1 = MilliSecs() SetBuffer BackBuffer() For n= 0 To 500 For t= 0 To Menge DrawImage bild(t), Rand(0,767),Rand(0,567) Next Flip 0 Cls Next Timer1 = MilliSecs()-Timer1 timer2 = MilliSecs() For n= 0 To 500 For t= 0 To Menge Color Rand(0,$ff),Rand(0,$ff),Rand(0,$ff) Oval Rand(0,767),Rand(0,567),32,32 Next Flip 0 Cls Next Timer2 = MilliSecs()-Timer2 Cls: Flip Color $FF,$FF ,$FF Print Timer1 + " Dauer mit Grafik" Print Timer2 + " Dauer mit Direckt malen" WaitKey End |
||
[BB2D | BB3D | BB+]
|
![]() |
Gina |
![]() Antworten mit Zitat ![]() |
---|---|---|
So... Hier mein Code:
Code: [AUSKLAPPEN] ; BUBBLES.BB ;-------------------------------------------------- Apptitle "Bubbles" ;Bildschirmgröße festlegen Graphics 640,480,16,2 SetBuffer BackBuffer() Cls delay 3000 ;-------------------------------------------------- ;Bubble-Grafiken laden bubble1 = loadimage("bubble1.png") bubble2 = loadimage("bubble2.png") bubble3 = loadimage("bubble3.png") bubble4 = loadimage("bubble4.png") bubble5 = loadimage("bubble5.png") bubble6 = loadimage("bubble6.png") --------------------------------------------------- ;Mit bunten Bubbles füllen timea = millisecs() for a = 1 to 100 SeedRnd MilliSecs() for i = 0 to 20 for ii = 0 to 15 farbe = Rand(1,6) select farbe case 1 DRAWIMAGE bubble1,i*32, ii*32 case 2 DRAWIMAGE bubble2,i*32, ii*32 case 3 DRAWIMAGE bubble3,i*32, ii*32 case 4 DRAWIMAGE bubble4,i*32, ii*32 Case 5 DRAWIMAGE bubble5,i*32, ii*32 Case 6 DRAWIMAGE bubble6,i*32, ii*32 End select next next Flip next timee = millisecs() waitkey cls time = timee - timea Print timea print timee print time flip WaitKey End Die Grafiken kommen auch gleich... HIER EDIT: Ich sehe grade, dass mein Grafikproggi den schwarzen Hintergrund automatisch in transparent umgewandelt hat. Und nu? |
||
hot-bitGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hoi,
glaube, du hast da einen leichten Denkfehler ... Du hast 3 Schleifen... die erste wird 100 mal wiederholt, ok. Die zweite Schleife, also i, wird 21 mal ausgeführt. Die dritte Schleife, also ii, wird 16 mal durchlaufen. i*ii= 21*16= 336 und das 100 mal ergibt 33600 Kugeln, welche du setzen läßt. Du willst aber nur 300, oder ? Toni |
||
- Zuletzt bearbeitet von hot-bit am So, Jul 11, 2004 11:08, insgesamt einmal bearbeitet
![]() |
Gina |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi hot-bit,
die dritte Schleife drum herum mit 100 hatte ich nur eingebaut, um das zeichnen der 300 Kugeln 100x zu wiederholen, damit man die verbrauchte Zeit besser messen kann. Dazwischen ist ja ein Flip. Aber du hast Recht, es müßte i = 0 to 19 und ii = 0 to 14 heißen... ![]() Da fällt man doch immer wieder drauf rein *hehe* Danke dir, Gina. |
||
![]() |
sbrogBetreff: Re: Grafik laden oder "malen" ? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gina hat Folgendes geschrieben: Ich muss sie ja später auch einzeln ansprechen können, falls das zu der Frage eine Rolle spielt.
Vielen Dank, Gina. Dann fällt einzeichnen schonmal weg. Außer wenn du das Bild in einen Bildbuffer einzeichnest |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Man kann auch direckt malen...
nur die Werte speichern Code: [AUSKLAPPEN] Dim Kugel (300,2)
Kugel (x,0)= Xposition Kugel (x,1)= Xposition Kugel (x,2)= Farbe Color 0,0,Kugel (x,2) oval Kugel (x,0),Kugel (x,1)=,32,32 |
||
[BB2D | BB3D | BB+]
|
![]() |
Gina |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke Rallimen, so ähnlich hatte ich es gestern auch noch probiert. Ich weiß nur nicht, wie ich sie dann "löschen" soll (wenn sie angeklickt werden), oder geht das nur mit einem Type-Feld? Da kann ich ja delete sagen, aber bei einem Dim-Feld? *grübel*
Hat noch jemand ne Idee wegen dem roten Hintergrund? Ursache scheint ja mein transparenter Hintergrund von den Bubbles zu sein. Muss ich ihn dann doch schwarz machen? Danke, Gina. |
||
![]() |
Bfox |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also den Hintergrund musst du Schwarz machen!
Wegen dem löschen: Code: [AUSKLAPPEN] Dim Kugel (300,3)
Kugel (x,0)= Xposition Kugel (x,1)= Xposition Kugel (x,2)= Farbe Kugel (x,3)= Besteht If Besteht = 1 Then Color 0,0,Kugel (x,2) oval Kugel (x,0),Kugel (x,1)=,32,32 EndIf Du kannst dann die Variable Besteht beliebig veränder: wenn der Kreis noch da ist: Besteht = 1; und wenn er weg ist: Besteht = 0! 8) |
||
Glauben ist Mangel an Wissen! |
![]() |
Gina |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ahh, ok danke, dann probier ich das mal...
Legt der jetzt eigentlich wirklich ein Feld von 300 x 4 x 4 Byte an? Ganz schön viel, oder? Gina. |
||
![]() |
Bfox |
![]() Antworten mit Zitat ![]() |
---|---|---|
Glaub schon dass der so viel anlegt! ![]() |
||
Glauben ist Mangel an Wissen! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group