Wie Arbeitet Drawimage
Übersicht

HahninatorBetreff: Wie Arbeitet Drawimage |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi, ich bin mal wieder da und habe eine Frage zu Drawimage. Also ich habe mir eine Funktion geschrieben die 24bit-BMP Bilder auslesen kann und naja sie ist scheiße langsam.
Code: [AUSKLAPPEN] Graphics 800,600 SetBuffer BackBuffer() Gegner_Bilder = CreateBank(0) Bild2 = LoadImage("planet1.bmp") Bild = ReadFile("planet1.bmp") SeekFile Bild, 18 X = ReadInt(Bild) Y = ReadInt(Bild) Volumen = Volumen + 8 + X*Y*3 ResizeBank(Gegner_Bilder, Volumen) PokeInt Gegner_Bilder, Volumen - 8 - (X*Y) * 3,X PokeInt Gegner_Bilder, Volumen - 4 - (X*Y) * 3,Y SeekFile Bild, 51 For J = Y To 1 Step -1 For I = X To 1 Step -1 PokeByte Gegner_Bilder, (Volumen-((X*Y)*3)) + (X*(J-1)+I)*3 - 1, ReadByte(Bild) PokeByte Gegner_Bilder, (Volumen-((X*Y)*3)) + (X*(J-1)+I)*3 - 2, ReadByte(Bild) PokeByte Gegner_Bilder, (Volumen-((X*Y)*3)) + (X*(J-1)+I)*3 - 3, ReadByte(Bild) Next Next Repeat Zeit = MilliSecs() Z= Z + 1 ;For I = 0 To X-1 ; For J = 0 To Y-1 ; Color PeekByte(Gegner_Bilder, 8 + ((X*J+I)*3)), PeekByte(Gegner_bilder, 9 + (X*J+I)*3), PeekByte(Gegner_bilder, 10 + ((X*J+I)*3)) ; Plot I + Z,J ; Next ;Next DrawImage Bild2,Z,0 Color 255,255,0 Text 0,0, MilliSecs()-Zeit Flip Cls Until KeyHit(1) naja und hier meine Frage, wie arbeite Drawimage, damit meine Funktion in etwa genauso schnell wird? Dies hat den Sinn, das ich Maskimage etwas aufwerten will. |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
deine Funktion wird nie so schnell, egal was du machst.
DrawImage nimmt DirectDraw zum zeichnen des Bildes. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Abrexxes |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was er damit sagen will ist, bei DirectDraw muss die CPU alles machen da die Graka damit nichts zu tun hat, und das ist langsam. | ||
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das stimmt nicht. DirectDraw nutzt so viel von der Grafik-Hardware, wie möglich. Windows GDI nutzt ausschließlich die CPU. | ||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
Hahninator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also wenn ich das jetzt richtig verstehe, muss ich denn text so umschreiben das er die BMP direkt verändert, damit dies net wären des Spiels anfängt zu Ruckeln? | ||
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Genau, du erstellt ein Bild und schreibst die Pixeldaten in den Buffer. Deine Methode ist so langsam, weil du "Plot" verwendest. | ||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
Hahninator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
also wenn ich wirtepixel bzw writepixelfast nehmen würde, gänge es schneller? | ||
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nur wenn du in den ImageBuffer zeichnest. Im Moment zeichnest du das Bild Pixel für Pixel in dem BackBuffer. Der bessere Weg ist, die Pixel in einen ImageBuffer zu schreiben und das Zeichnen DirectDraw zu überlassen. Du machst sozusagen in jedem Frame das, was vor der Hauptschleife einmal ausreichen würde. | ||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
Hahninator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
naja da ist schon wieder ein problem, Wenn ich es richtig in Erinnerung habe, kann ich mit dem Imagebuffer nur ein Bild laden und eigentlich hatte ich vor mehrere Bilder zu laden........oder irre ich mich? | ||
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Speicher die Bilder doch in einem Array. Dann ist es auch noch einfacher zu benutzen als die Methode mit den Banks. | ||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
Hahninator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
jo ich schreibe mal mein text um^^
hier mal ein kleiner auszug. meiner meinung nach habe ich mich selbst übertroffen^^ Code: [AUSKLAPPEN] Function Hintergrund() For Hinter.Hintergrund = Each Hintergrund For Bilder.Bild_Infos = Each Bild_Infos If Bilder\Nummer = Hinter\Bild Then If Hinter\scrollen = 0 Then DrawImage Hinter\Bild, Hinter\X, Hinter\Y EndIf If Hinter\scrollen > 0 Then If Instr(Hinter\scrollen/2,".5") > 0 Then For I = -1 To 800/ Bilder\Breite For J = -1 To 600/ Bilder\Hoehe DrawImage Bilder\Name, Hinter\X + I * Bilder\hoehe, Hinter\Y + (J * Bilder\Breite) Next Next Hinter\Y = Hinter\Y + Ceil(Hinter\scrollen/2) If hinter\Y > Bilder\hoehe Then Hinter\Y = Hinter\Y - Bilder\hoehe If hinter\Y < -1*Bilder\hoehe Then Hinter\Y = Hinter\Y + Bilder\hoehe EndIf EndIf If Instr(Hinter\scrollen/2,".5") = 0 Then For I = -1 To 800/ Bilder\Breite For J = -1 To 600/ Bilder\Hoehe DrawImage Bilder\Name, Hinter\X + I * Bilder\breite, Hinter\Y + J* Bilder\hoehe Next Next Hinter\X = Hinter\X + Ceil(Hinter\scrollen/2) If Hinter\X > Bilder\Breite Then Hinter\X = Hinter\X - Bilder\Breite If Hinter\X < -1 * Bilder\Breite Then Hinter\X = Hinter\X + Bilder\Breite EndIf EndIf Next Next End Function naja scrollen in 4 richtungen mit einer Zahl möglich^^ |
||
![]() |
Hip Teen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: naja da ist schon wieder ein problem, Wenn ich es richtig in Erinnerung habe, kann ich mit dem Imagebuffer nur ein Bild laden und eigentlich hatte ich vor mehrere Bilder zu laden........oder irre ich mich?
Kann sein dass ich dich falsch verstehe, aber mit CreateImage kann man eigentlich beliebig viele Bilder erstellen und in diese reinzeichnen. |
||
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger" |
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja. Mit SetBuffer ImageBuffer(variable_vom_gewuenschten_bild) kannst du jederzeit ein beliebiges Bild bearbeiten. Jedes Bild hat seinen "eigenen" ImageBuffer. | ||
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group