Grafik laden oder "malen" ?

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2, 3  Weiter

Neue Antwort erstellen

Gina

Betreff: Grafik laden oder "malen" ?

BeitragSa, Jul 10, 2004 15:45
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

BladeRunner

Moderator

BeitragSa, Jul 10, 2004 15:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn es ja zum üben ist.... probier beide Varianten und ermittle die schnellere ... Wink
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

BeitragSa, Jul 10, 2004 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm..., naja, bei mir merke ich da keinen Unterschied... Rolling Eyes

Wie kann ich das messen?

BladeRunner

Moderator

BeitragSa, Jul 10, 2004 16:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Jul 10, 2004 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Ahh, ok danke. Das mache ich dann mal...

Gina

BeitragSa, Jul 10, 2004 18:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Sooo, hier mal meine Ergebnisse:

Bei 100 Durchläufen (10000 hat mir zu lange gedauert...Wink) braucht er zum

"malen" ca. 11300 Millisekunden und zum

laden der Grafiken ca. 30100 Millisekunden... Shocked

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... Laughing

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

BeitragSa, Jul 10, 2004 18:25
Antworten mit Zitat
Benutzer-Profile anzeigen
ä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

BeitragSa, Jul 10, 2004 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Jul 10, 2004 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
@ 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 Wink

@ 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

BeitragSa, Jul 10, 2004 19:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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...

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Jul 10, 2004 19:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Jul 10, 2004 19:54
Antworten mit Zitat
Benutzer-Profile anzeigen
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-bit

Gast

BeitragSa, Jul 10, 2004 20:43
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

BeitragSa, Jul 10, 2004 20:55
Antworten mit Zitat
Benutzer-Profile anzeigen
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... Wink

Da fällt man doch immer wieder drauf rein *hehe*

Danke dir, Gina.

sbrog

Betreff: Re: Grafik laden oder "malen" ?

BeitragSo, Jul 11, 2004 9:00
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSo, Jul 11, 2004 9:57
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Jul 11, 2004 10:22
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Jul 11, 2004 10:30
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Jul 11, 2004 10:37
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Jul 11, 2004 10:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Glaub schon dass der so viel anlegt! Shocked
Glauben ist Mangel an Wissen!

Gehe zu Seite 1, 2, 3  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group