Wie werden BMP Dateien von BB intern verwaltet ???

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

x_to

Betreff: Wie werden BMP Dateien von BB intern verwaltet ???

BeitragMi, Okt 21, 2009 21:10
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hätte folgende frage:

wenn ich ein bmp file lade, dann liegt es ja irgendwo im Speicher und es ist über das handle (speicheradresse) ansprechbar.

wie werden diese BMPs von BB eigentlich intern verwaltet....weiß das jemand ??

ich habe ein programm geschrieben mit dem man aus tiles und original leveldaten ganze level als bmp file abspeichern kann...

allerdings gibt es ab bestimmten bildgrößen probleme mit BB diese abzuspeichern, deswegen wollte ich gern eine eigene funktion schreiben um die bmps nach meinen vorstellungen zu speichern....

nur bräuchte ich ja die farb informationen und color indizes für die tiles und wo finde ich die wenn BB das bmp geladen hat ???

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Okt 21, 2009 21:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum benutzt du überhaupt ein Bild um Leveldaten zu speichern? Ich mein ja nur, weil dann ja im Grunde Grafikspeicher da drunter leiden muß, statt der dafür gemachte RAM.

Eine Bank zum Beispiel kann dynamisch (gibt ein Handle zurück) erstellt werden, lässt sich per Laufzeit in der Größe verändern und kann sogar in einem Rutsch ohne eigene Speicherroutinen in oder aus eine Dateir transformiert werden.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

x_to

BeitragMi, Okt 21, 2009 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
es handelt sich um eine app um gamemaps für diese seite zu erstellen...Wink


http://hol.abime.net/

so wie diese maps aus den original tiles und map data erstellt wurden..:

http://hol.abime.net/1535/gamemap

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Okt 21, 2009 22:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Cool Turrican II, hach. Cool

Also in deinem Fall könnte http://www.wotsit.org eine gute Anlaufstelle sein. Viele unkomprimierte Bilddateiformate sind einfach aufgebaut. Diese könnte man dann selbst schreiben und dann später mit einem Grafikprogramm auf das beliebige Format konvertieren.

Speichermanipulation bezüglich BB um große Bilddaten verwerten zu können stelle ich mir viel komplizierter vor.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

x_to

BeitragMi, Okt 21, 2009 22:22
Antworten mit Zitat
Benutzer-Profile anzeigen
die lade funktionen von BB will ich ja nutzen...die speicherfunktion über den Imagebuffer wiederum nicht....weil ab einer bestimmten größe probleme auftauchen.....

das BMP format hab ich schon "studiert"..Wink

aber wie könnte ich die geladenen daten separat aufrufen um sie zum speichern zu verwenden....?????

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Okt 21, 2009 22:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Also das Ding ist, dass zum Beispiel 1535_gamemap6.png etwa 48MB an Grafikspeicher benötigt. Dafür braucht man mindestens eine 64MB-Grafikkarte (falls es überhaupt ausreicht). Schon aus diesem Grund kann man so ein Programm ja nicht im Umlauf bringen.

Zitat:
aber wie könnte ich die geladenen daten separat aufrufen um sie zum speichern zu verwenden....?????

Wenn du das BMP-Dateiformat schon so gut kennst, dann kannst du doch ganz einfach mit Write-Befehlen eine Datei selbst schreiben. Du lädst die Mapdaten - dessen Dimension du kennst - einzelnder Tiles ab, und speicherst für jedes Tile in die Datei das Tile an gegebener Position.

Dazu habe ich mal ein kleines Beispielprogramm geschrieben:

Code: [AUSKLAPPEN]
Local Fileout=WriteFile("d:\mydata.dat")
WriteInt(Fileout,1)
WriteInt(Fileout,2)
WriteInt(Fileout,3)
WriteInt(Fileout,4)
SeekFile(Fileout,100)
WriteInt(Fileout,5)
CloseFile(Fileout)

Wie man unschwer erkennen kann, ist die Datei am Ende 104 Bytes groß, obwohl nur 5 Integer Zahlen geschrieben wurden. Das liegt daran, dass mit SeekFile die Position für das letzte Integer an Position 100 gesetzt wurde. Wenn du nun einfach drauf los die einzelnen Tiles einer selbst geschriebenen Bilddatei einzeichnest, dann sollte ja alles klappen. Du musst nicht einmal von oben (bzw. bei BMP von unten) beginnen zu schreiben/zeichnen, da du für jede Tilezeile einmal mit SeekFile die Dateiposition festlegst. Du musst am Anfang nur wissen, wie viele Tiles die Map maximal horizontal hat, dammit du das Offset pro Zeile (plus natürlich noch den Dateiheader) bestimmen kannst.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

x_to

BeitragSa, Okt 24, 2009 22:48
Antworten mit Zitat
Benutzer-Profile anzeigen
hmmm..vielleicht habe ich mich nur falsch ausgedrückt...

die app lädt eine tilemap und weist jedem einzelnen tile eine variable zu
dabei werden die tiles noch gespiegelt...

BlitzBasic: [AUSKLAPPEN]
framecount = (ImageWidth(tile_image_handle)/tilebreite)*(ImageHeight(tile_image_handle)/tilehoehe)
tilemap = LoadAnimImage (tile_file,tilebreite,tilehoehe,0,framecount)
Dim frames(framecount*4)
For i# = 0 To framecount-1
frames(i) = CreateImage (tilebreite,tilehoehe)
CopyRect 0,0,tilebreite,tilehoehe,0,0,ImageBuffer(tilemap,i),ImageBuffer(frames(i))
;horizontal spiegeln
frames(i+framecount) = CopyImage (frames(i))
HandleImage frames(i+framecount),0,tilehoehe
ScaleImage frames(i+framecount),1,-1
;vertikal spiegeln
frames(i+(2*framecount)) = CopyImage (frames(i))
HandleImage frames(i+(2*framecount)),tilebreite,0
ScaleImage frames(i+(2*framecount)),-1,1

;horizontal und vertikal spiegeln
frames(i+(3*framecount)) =CopyImage (frames(i))
HandleImage frames(i+(3*framecount)),tilebreite,tilehoehe
ScaleImage frames(i+(3*framecount)),-1,-1

UpdateProgBar progbar,i/framecount
Next



das ist der ladevorgang...

zum speichern wollte ich aber jedes einzelne "frames(x)" aus dem speicher lesen und in die zieldatei speichern...
also eigentlich nur die indizes....
nur ich weiß die struktur der images im speicher nicht...

mit BB kann man ja auch nicht den speicher manuell bearbeiten...

damals mit BB auf dem Amiga gabs wenigstens die pointer...aber die fehlen hier...Sad

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group