Bilder via HTTP
Übersicht

![]() |
Mathias-KwiatkowskiBetreff: Bilder via HTTP |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich habe nochmal eine frage, wie kann man normale BMP dateien von einem webserver downloaden, weil in meinem spiel das ich grade programmiere, was nur online funktioniert, möchte ich vieleicht auch mal so events machen, nur das problem was ich daran seh ist das man immer einen neuen clienten downloaden muss, dieses möchte ich umgehen, in dem ich 1. mein spiel progg, 2. den server ( die 2 sachen sind auch schon weit entwickelt und funktionieren ) und 3. ein programm worin hinterlegt ist welche bilder benötig werden und welche nicht,
wenn programm 3. nun sagt wir brauchen ostereier.BMP dann soll dieses am server übermittelt werden, was einfach zu machen ist, und der server übermittelt es nun an den clients, die clients laden sich dann automatisch das bild, dann wirds eine dazugehörige PHP datei geben in der "ein script" steht ob das bild nun ne animation ist oder einfach ein bild, wenn animation wieviele frames ect. wenn die clients das ganze dann haben wird das automatisch im game angezeigt werden. ich finde es ist eine schöne vorstellung und realisierbar, nur muss ich wissen wie man ein bild downloaden kann via http. danke im vorraus, ich freu mich auch schon darauf das spiel mal präsentieren zu dürfen. es wird bald dann ein testserver geben, wo das game 21 tage drauf laufen wird, damit ich dann erfahren kann wie es ankommt ect. |
||
![]() |
d-bug |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] LoadImage ("http://www.deinserver.de/ostereier.bmp")
cheers |
||
![]() |
FOODy |
![]() Antworten mit Zitat ![]() |
---|---|---|
d-bug hat Folgendes geschrieben:
Fast: ( Anstelle von "://" muss ein "::" hin ) Code: [AUSKLAPPEN] LoadImage ("http::www.deinserver.de/ostereier.bmp")
Falls du ein Framework verwendest brauchst du noch zusätzlich das BRL.HTTPStream Module. Gruß, FOODy |
||
BlitzMax + MaxGUI, 64-bit Arch Linux: Intel Core² E8500 | 8 GB Ram | GeForce GTX 460 · 1024 MB |
![]() |
d-bug |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oh stimmt... Verdammter Automatismus ![]() |
||
![]() |
Mathias-Kwiatkowski |
![]() Antworten mit Zitat ![]() |
---|---|---|
wird das bild dann direct vom server aus geladen, oder wird es local gespeichert? | ||
c64 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ist nur ne Behauptung aber ich bin mir ziemlich sicher das es vom "Server" aus in den Speicher geladen wird ohne "Zwischenlagerung". Ist fast wie von einer Localen platte laden nur das die Location (URL) woanders ist.
mfg. c64 |
||
Betreten verboten! Kinder haften für ihre Eltern! |
![]() |
Mathias-Kwiatkowski |
![]() Antworten mit Zitat ![]() |
---|---|---|
tut mir leid aber habe nun folgenden code
Code: [AUSKLAPPEN] Graphics 1024, 768
Char000:TImage = LoadImage ("http::www.purechannel.ath.cx/000.bmp") Repeat DrawImage char000, 20, 20 Flip Until KeyDown(KEY_ESCAPE) End ich habe www. weggelassen und es funktioniert nicht, genauso wie mit www. der will einfach nicht genauso wie Localhost, funktioniert leider auch nicht. aber das bild is da , wenn man es mit browser öfnnen will funktioniert es. thx im vorraus |
||
![]() |
FOODy |
![]() Antworten mit Zitat ![]() |
---|---|---|
Liegt wohl daran das der BMP Loader einen "Seek-baren" Stream benötigt.
So geht es: Code: [AUSKLAPPEN] SuperStrict
Framework brl.glmax2d Import brl.bmploader Import brl.httpstream Import brl.bankstream Graphics 1024, 768 Local char000:TImage = LoadImage(CreateBankStream(LoadBank("http::www.purechannel.ath.cx/000.bmp"))) Repeat DrawImage char000, 20, 20 Flip Until KeyDown(KEY_ESCAPE) End Gruß, FOODy |
||
BlitzMax + MaxGUI, 64-bit Arch Linux: Intel Core² E8500 | 8 GB Ram | GeForce GTX 460 · 1024 MB |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ansonsten kann man auch selber etwas schreiben ![]() Code: [AUSKLAPPEN] SuperStrict
Function LoadHttpImage:TImage(host:String, path:String, port:Int = 80) 'SocketStream erstellen Local stream:TSocketStream = TSocketStream.CreateClient(host, port) 'Wenn die Verbindung nicht hergestellt werden konnte, kein Bild zurück geben If stream.Eof() Then Return Null 'HTTP Header senden WriteLine(stream, "GET " + path + " HTTP/1.1") WriteLine(stream, "Host: " + host) WriteLine(stream, "User-Agent: BlitzMax") WriteLine(stream, "Accept: image/*") WriteLine(stream, "Connection: close") WriteLine(stream, "") 'Wenn nichts gelesen werden kann, kein Bild zurückgeben If stream.Eof() Then stream.Close() Return Null EndIf 'Status abfragen (nur 200 OK) akzeptieren Local status:String = ReadLine(stream) If Not status.Contains("200") Then Return Null 'Antwort-Header lesen Local size:Long = 0 Local typ:String = "" Local line:String = ReadLine(stream) While (Not stream.Eof()) And (line <> "") If line.ToLower().StartsWith("content-length: ") Then 'Grösse des Inhalts (Bild) lesen Local tmp:String[] = line.Split(": ") size = Long(tmp[1]) Else If line.ToLower().StartsWith("content-type: ") Then 'Typ des Inhalts lesen (sollte ein Bild sein) Local tmp:String[] = line.Split(": ") typ = tmp[1] EndIf line = ReadLine(stream) Wend 'Abbrechen, wenn die Grösse 0 ist, oder wenn der Inhalt kein Bild ist, 'oder wenn nichts gelesen werden kann If size = 0 Or (Not typ.ToLower().StartsWith("image/")) Or stream.Eof() Then stream.Close() Return Null EndIf 'Bankstream erstellen Local bank:TBankStream = TBankStream.Create(TBank.Create(0)) 'Einen 4 KB Buffer verwenden Local buf:Byte[] = New Byte[4096] Local gelesen:Int = 0 'Lesen vom Netzwerkstream in den Bankstream While Not stream.Eof() And gelesen < size Local i:Int = stream.Read(buf, 4096) If i > 0 Then bank.Write(buf, i) gelesen :+ i Else 'Unvollständig gelesen, oder Verbindungsunterbruch Return Null EndIf Wend stream.Close() 'Das Bild vom Bankstream laden SeekStream(bank, 0) Local img:TImage = LoadImage(bank) buf = Null bank.Close() bank = Null Return img End Function Graphics 800, 600, 0 Local img:TImage = LoadHttpImage("www.20min.ch", "/images/logo3.jpg") Repeat Cls DrawImage img, 50, 50 Flip Until KeyHit(KEY_ESCAPE) EndGraphics End Es ist jedoch nicht so zuverlässig, da HTTP-Umleitungen etc. nicht beachtet werden. Das Bild wird nur geladen wenn der HTTP-Status 200 (OK) ist. |
||
![]() |
Mathias-Kwiatkowski |
![]() Antworten mit Zitat ![]() |
---|---|---|
mhh,. ja der lädt das bild zwar, aber nur im arbeitsspeicher, nur jetzt is es ja so das der soll das bild laden, und local speichern.
also in mein prog soll ein durchlauf sein if bild="lol.bmp" im ordner gfx then ok ansonsten lade das bild runter und es soll dann local geladen werden, da man ja sonst immer warten muss bis 100% alles heruntergeladen ist. weiss jemand ein rat? |
||
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du hast doch den Stream / die Bank, wenn du die Datei geladen hast.
Dann musst du den Stream / Bank nur noch auf der Festplatte speichern. Entweder mit WriteStream oder SaveBank. |
||
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 |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Achso, dann hab ich dich falsch verstanden. Dachte du wolltest es nur im Arbeitsspeicher laden. Vielleicht ist dann das hier das richtige für dich:
https://www.blitzforum.de/foru...hp?t=24120 Schau dir da mal example1.bmx an. Dort wird das Bild heruntergeladen und auf der Festplatte gespeichert. Diese Klassen berücksichtigen sogar einfache Weiterleitungen, und machen einen neuen HTTP-Request. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group