Wie kann ich Bilder speichern?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Sir Dan

Betreff: Wie kann ich Bilder speichern?

BeitragFr, März 04, 2005 11:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Ich wollte einmal wissen, ob/wie ich Bilder in einer Datei (.map)
speichern kann? Und wenn es geht zusammen mit ein paar Variablen.
Ich danke schon im voraus für die Antworten Very Happy
 

lettorTrepuS

BeitragFr, März 04, 2005 12:45
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

Hubsi

BeitragFr, März 04, 2005 12:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Um ein Bild zu speichern kannst Du einfach SaveBuffer (also SaveBuffer(ForntBuffer(),"tolles_bild.map") oder SaveImage verwenden, je nach Bedarf. Wenn Du noch weitere Werte drin speichern willst wirds schon komplizierter. Dazu würd ich die Größe des Bildes (ImageWidth() und ImageHeight() ) an den Anfang der Datei speichern und mit Hilfe dieser Werte zwei For-Schleifen beauftragen Readpixel() und WriteInt() auszuführen. Nach den Schleifen einfach die noch benötigten Werte dranhängen -> fertig Very Happy Zum auslesen gehst Du dann das ganze mit den Gegenstücken der Befehle wieder durch. Zusätzlich wirst Du noch CreateImage() brauchen und das wars auch schon.

Sehr viel einfacher ist es allerdings einfach das Bild normal zu speichern und die Werte in einer extra Datei ablegen Wink

Edit: Schade, da war einer schneller Very Happy Und ich hab mir doch solche Mühe gegeben Smile
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Sir Dan

BeitragFr, März 04, 2005 15:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier ist der code :

Code: [AUSKLAPPEN]
For x = 0 To 640
For y = 0 To 640
GetColor(x,y)
r%=ColorRed()
g%=ColorGreen()
b%=ColorBlue()
speicher_r(x,y) = r%
speicher_g(x,y) = g%
speicher_b(x,y) = b%
Next
Next
save$ = Input("Name der Datei : ")
karten_datei = WriteFile("data/" + save$ + ".map"
For x = 0 To 640
For y = 0 To 640
WriteInt(karten_datei,speicher_r(x,y))
WriteInt(karten_datei,speicher_g(x,y))
WriteInt(karten_datei,speicher_b(x,y))
Next
Next
CloseFile karten_datei


Ich dachte er würde so funktionieren, aber wenn ich diese ´.map´
datei lade und auf dem Bildschirm ausgeben will kommt der Fehler
´Array index out of bounds´ (oder so ähnlich)

edit: Wie mache ich das der Code als Code und nicht als Text angezeigt wird?

edit2: So ich habe einmal den Code deutlicher hervorgehoben
  • Zuletzt bearbeitet von Sir Dan am Fr, März 04, 2005 16:50, insgesamt einmal bearbeitet

simi

BeitragFr, März 04, 2005 16:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich denke, du hast etwas falsch verstanden, so erstellst dein EIGENES Bildformat, das kannst du nicht mit LoadImage öffnen... du mussst selbst eine Öffnungsfunktion schreiben....

Ansonsten kannst du mit SaveBuffer(BackBuffer(),DerinDatei.bmp) dein Bild NORMAL abspeichern (das heisst, du kannst es dann mit LoadImage öffnen...)


// editCode: [AUSKLAPPEN]
[code][/code]
BB_Code geht nicht mehr/noch nicht


Ansonsten zeig mal dein lade-code, ich glaube, du hast es schon richtig gemacht (Hab nicht alles gelesen Rolling Eyes Rolling Eyes )

Sir Dan

BeitragFr, März 04, 2005 16:09
Antworten mit Zitat
Benutzer-Profile anzeigen
@simi

ich habe ja auch erst mit einer For Next Schleife die Werte wieder ausgelesen aus der .map datei. Und dann wieder Pixel für Pixel
in ein leeres Bild (CreateImage Befehl) gemalt. Aber dann kommt wie gesagt der Fehler.(siehe oben) Trotzdem danke Für die Antwort Very Happy

edit: Den Code habe ich in den weiten meines Rechners verschlampt Embarassed Embarassed Embarassed
Ich werde ihn nocheinmal neu schreiben bzw einmal suchen.
Das kann etwas dauern Mr. Green
  • Zuletzt bearbeitet von Sir Dan am Fr, März 04, 2005 16:12, insgesamt einmal bearbeitet

BladeRunner

Moderator

BeitragFr, März 04, 2005 16:11
Antworten mit Zitat
Benutzer-Profile anzeigen
benutz code anstatt bb-code. der ist defekt derzeit.
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

Sir Dan

BeitragFr, März 04, 2005 16:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Endlich habe ich den Lade code gefunden

Code: [AUSKLAPPEN]
loadname$ = Input("Name der Datei : ")
read_datei = ReadFile("data/" + loadname$ + ".map")
For x = 0 To 640
For y = 0 To 640
speicher_r(x,y) = ReadInt(read_datei)
speicher_g(x,y) = ReadInt(read_datei)
speicher_b(x,y) = ReadInt(read_datei)
Next
Next
bild = CreateImage(640,640)
For x = 0 To 640
For y = 0 To 640
Color speicher_r(x,y),speicher_g(x,y),speicher_b(x,y)
Plot x,y
Next
Next
CloseFile read_datei


Wo könnte da ein Fehler sein?
 

David

BeitragFr, März 04, 2005 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Zeichmal den ganzen Code!

Übrigens bringt es dir nur Nachteile, wenn du die Farbkomponenten als Integer speicherst! Die Datei wird dann nämlich viel zu groß!

[Edit]
(Sehr langsames Wink) Beispiel:

Code: [AUSKLAPPEN]

Graphics 640, 480, 32

Color 255, 0, 0
Oval 0, 0, 150, 150

Color 0, 255, 0
Line 639, 0, 639, 480

file = WriteFile( "test.map" )

For x = 0 To 639
   For y = 0 To 479
      GetColor( x, y )
      
      WriteByte( file, ColorRed() )
      WriteByte( file, ColorGreen() )
      WriteByte( file, ColorBlue() )
   Next
Next

CloseFile( file )


Code: [AUSKLAPPEN]

Graphics 640, 480, 32

file = ReadFile( "test.map" )

For x = 0 To 639
   For y = 0 To 479
      r = ReadByte( file )
      g = ReadByte( file )
      b = ReadByte( file )
      
      Color( r, g, b )
      Plot( x, y )
   Next
Next

CloseFile( file )



grüße

Sir Dan

BeitragFr, März 04, 2005 17:32
Antworten mit Zitat
Benutzer-Profile anzeigen
also hier ist der komplette code(aber es sind zwei verschiedene Programme)

Code: [AUSKLAPPEN]

;speicher-programm

graphics 800,640
dim speicher_r(640,640)
dim speicher_g(640,640)
dim speicher_b(640,640)
; an dieser stelle lade/male die Bilder auf den bildschirm die du
;zusammen speichern willst
For x = 0 To 640
For y = 0 To 640
GetColor(x,y)
r%=ColorRed()
g%=ColorGreen()
b%=ColorBlue()
speicher_r(x,y) = r%
speicher_g(x,y) = g%
speicher_b(x,y) = b%
Next
Next
save$ = Input("Name der Datei : ")
karten_datei = WriteFile("data/" + save$ + ".map"
For x = 0 To 640
For y = 0 To 640
WriteInt(karten_datei,speicher_r(x,y))
WriteInt(karten_datei,speicher_g(x,y))
WriteInt(karten_datei,speicher_b(x,y))
Next
Next
CloseFile karten_datei
end

;-----------------------------------------------------------------------------------
; Lade-programm

graphics 800,640
dim speicher_r(640,640)
dim speicher_g(640,640)
dim speicher_b(640,640)
loadname$ = Input("Name der Datei : ")
read_datei = ReadFile("data/" + loadname$ + ".map")
For x = 0 To 640
For y = 0 To 640
speicher_r(x,y) = ReadInt(read_datei)
speicher_g(x,y) = ReadInt(read_datei)
speicher_b(x,y) = ReadInt(read_datei)
Next
Next
bild = CreateImage(640,640)
For x = 0 To 640
For y = 0 To 640
Color speicher_r(x,y),speicher_g(x,y),speicher_b(x,y)
Plot x,y
Next
Next
CloseFile read_datei
delay 5000
end


So da ist der Komplette Code der zwei Programme.
Wo ist der Fehler Question
 

David

BeitragFr, März 04, 2005 17:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Beide Codes funktionieren bei mir ohne Fehler, weis nicht was dein Problem ist...

Aber nimm zum Speichern bitte wirklich nur ein Byte pro Farbkomponente.
Deine Version verbraucht nämlich rund 4,7 MB. Wenn du statt Integern Bytes nimmst brauchst "nurnoch" 1,17 MB.

grüße

Sir Dan

BeitragFr, März 04, 2005 17:58
Antworten mit Zitat
Benutzer-Profile anzeigen
@ David

Danke für den Tip Very Happy
Ich habe den Fehler gefunden
Bei einer For Next Schleife hatte ich aus versehen ´6400´ statt
´640´ geschrieben. Embarassed Embarassed Embarassed Embarassed Embarassed

Nun zu meiner neuen Frage:

Wie kann ich die geschwindigkeit (m)eines Programmes feststellen
bzw was Für Systemresourcen (Arbeitsspeicher,usw..) ich benötige.
Ich frage weil ich einen Freund habe der einen älteren PC hat auf dem
nicht alles läuft.(Er ist mein Versuchsobjekt Mr. Green )
Oder laufen alle Programme auf dem PC, auf dem auch BB läuft?
 

David

BeitragFr, März 04, 2005 21:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Was sinnig ist, um ein BB Spiel laufen zu lassen, ist eine DX7 kompatible Grafikkarte und installiertem DX min. Version 7(??).
Ansonsten dürften die Programme auch auf langsameren Rechnern (400 MHz etc...) ganz gut laufen. 64 MB Ram sollten auch genügen, besser 126 oder mehr.

Ich kann jetzt nur raten, aber sollte schon so ungefähr stimmen.

grüße

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group