39dll TCP Bild Übertragung

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 39dll TCP Bild Übertragung

    Hallo,

    ich bin zurzeit am schreiben eines kleinen Onlinespiels und dazu müsste ich Bilddateien(.png, maximal 1024x1024 Pixel, maximal 400kB groß) von Server zum Client übertragen. Das ganze läuft über die 39dll und eine TCP Verbindung.

    Nur habe ich bisher noch keine Idee, wie ich das machen könnte.
    Oder auch ob sowas überhaupt machbar ist.

    FG
    andre111
  • falls das Bild in einer Datei vorhanden ist:
    Wieso öffnest du diese nicht im binären Modus und überträgst nach und nach jeden einzelnen Byte?
    Auf der anderen Seite wird dieser einfach abgefangen und in eine leere Bilddatei nach und nach reingeschrieben.

    Falls dies eine Ressource im GameMaker selbst ist:
    Kannst du jeden Pixel nacheinander abtasten und den daraus resultierenden Farbcode rübersenden.
    Dieser wird auf der Gegenseite angefangen und erstmal auf eine Surface gezeichnet und zum Schluss in eine neu angelegte Ressource gezeichnet. (Hierbei stellt sich natürlich die Frage mit den Transparenzen)

    Befehle die du brauchen könntest:


    Quellcode

    1. In rare situations you might need to read data from binary files. The following low-level routines exist for this:
    2. file_bin_open(fname,mod) Opens the file with the indicated name. The mode indicates what can be done with the file: 0 = reading, 1 = writing, 2 = both reading and writing). When the file does not exist it is created. The function returns the id of the file that must be used in the other functions. You can open multiple files at the same time (32 max). Don't forget to close them once you are finished with them.
    3. file_bin_rewrite(fileid) Rewrites the file with the given file id, that is, clears it and starts writing at the start.
    4. file_bin_close(fileid) Closes the file with the given file id.
    5. file_bin_size(fileid) Returns the size (in bytes) of the file with the given file id.
    6. file_bin_position(fileid) Returns the current position (in bytes; 0 is the first position) of the file with the given file id.
    7. file_bin_seek(fileid,pos) Moves the current position of the file to the indicated position. To append to a file move the position to the size of the file before writing.
    8. file_bin_write_byte(fileid,byte) Writes a byte of data to the file with the given file id.
    9. file_bin_read_byte(fileid) Reads a byte of data from the file and returns this.
    Alles anzeigen


    ansonsten schau dir mal das eine oder andere Surfaces-Tutorial an.
    ////////////////////////////////////////////////////////////////////////////////////////////////
  • Biochemic schrieb:

    Kannst du jeden Pixel nacheinander abtasten und den daraus resultierenden Farbcode rübersenden.
    Dieser wird auf der Gegenseite angefangen und erstmal auf eine Surface gezeichnet und zum Schluss in eine neu angelegte Ressource gezeichnet. (Hierbei stellt sich natürlich die Frage mit den Transparenzen)
    Dazu schrieb ich hier bereits einen Code. Dieser hält das Spiel auch nicht an und kann bei Bedarf auch den Alpha-Kanal nutzen. Diese Pixel für Pixel Variante macht dann Sinn wenn du alles im Speicher behalten willst und keine lokalen Dateien.
  • Du kannst die Datei mit der 39dll einlesen (fileopen, fileread, fileclose) und dann in Portionen (1024bytes) versenden, am Ende dann kannst du das ganze mit filewrite in die Datei schreiben. Wenn du schon die 39dll für andere Zwecke benutzt kannst auch einen zweiten Buffer verwenden, in den Skripts wird ja der ganze Kram irgendwo erklärt.
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von henrik1235 ()