Übersetzung von GFA Basic nach Purebasic

Anfängerfragen zum Programmieren mit PureBasic.
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: Übersetzung von GFA Basic nach Purebasic

Beitrag von stevie1401 »

Quelle: HeX0R

Die Clients können eigene Icons an den Server senden, die dort dann gespeichert werden.
Deshalb saveimage()
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
jojo1541
Beiträge: 431
Registriert: 15.09.2007 17:12
Wohnort: Irgendwo im Nirgendwo

Re: Übersetzung von GFA Basic nach Purebasic

Beitrag von jojo1541 »

stevie1401 hat geschrieben:Quelle: HeX0R

Die Clients können eigene Icons an den Server senden, die dort dann gespeichert werden.
Deshalb saveimage()
Und was hat die Art, wie du das Bild speicherst mit dem Ergebnis dahinter zu tun? :|
Läuft auf das selbe hinaus, nur das du nicht die Image-Lib und ergo auch kein Fenster brauchst.

In DecodeStringToImage am Ende einfach statt ctachImage direkt in eine Datei schreiben oder besser als ProcedureReturn den Pointer auf den Speicherbereich + die Länge des Bildes zurückgeben. Und dann so direkt in eine Datei schreiben.
Ich verkaufe Rechtschreibfehler und jede menge GROßBUCHSTABEN. Alles unbegrenzt zu haben.
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: Übersetzung von GFA Basic nach Purebasic

Beitrag von stevie1401 »

In DecodeStringToImage am Ende einfach statt ctachImage direkt in eine Datei schreiben oder besser als ProcedureReturn den Pointer auf den Speicherbereich + die Länge des Bildes zurückgeben. Und dann so direkt in eine Datei schreiben.
Leider verstehe ich überhaupt nicht was du meinst.
Kannst du mir bitte ein Beispiel geben?
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
jojo1541
Beiträge: 431
Registriert: 15.09.2007 17:12
Wohnort: Irgendwo im Nirgendwo

Re: Übersetzung von GFA Basic nach Purebasic

Beitrag von jojo1541 »

Eine (leicht) abgewandelte Version von HeXORs DecodeStringToImage-Procedure:

Code: Alles auswählen

Procedure DecodeStringToFile(String.s, FileName.s)
   Protected *Buffer, L, *StringAscii, success
   
   *Buffer = AllocateMemory(Len(String)) ;Die Binärdatei ist IMMER kleiner, als der String, egal, wir kümmern uns nicht darum.
   If *Buffer
      CompilerIf #PB_Compiler_Unicode ;Obacht bei Unicode! Base64Decode benötigt den String in Ascii!
         *StringAscii = AllocateMemory(StringByteLength(String, #PB_Ascii))
         If *StringAscii
            PokeS(*StringAscii, String, -1, #PB_Ascii | #PB_String_NoZero)
            L = Base64Decoder(*StringAscii, MemorySize(*StringAscii), *Buffer, MemorySize(*Buffer))
            FreeMemory(*StringAscii)
         EndIf
      CompilerElse
         ;Alles easy, kein Unicode
         L = Base64Decoder(@String, Len(String), *Buffer, MemorySize(*Buffer))
      CompilerEndIf
   
      If L
        ;Hier wird eingegriffen. Wir brauchen kein PB-Image, sondern nur aus dem Speicher in eine Datei zu schreiben.
        ;Image = CatchImage(#PB_Any, *Buffer, L)
        If OpenFile(0,FileName)
          success = WriteData(0,*Buffer,L)
          CloseFile(0)
        EndIf
        
      EndIf
      FreeMemory(*Buffer)
   EndIf
   
   ProcedureReturn success
EndProcedure
Ist jetzt nicht von mir getestet, sollte aber ohne Probleme seinen Dienst tun.
Ich verkaufe Rechtschreibfehler und jede menge GROßBUCHSTABEN. Alles unbegrenzt zu haben.
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: Übersetzung von GFA Basic nach Purebasic

Beitrag von stevie1401 »

Danke für deine Mühen :)

Ich habe es nun mit vielerlei Methoden getestet, ich kann mit Linux nicht wirklich lange Strings senden, maximal so 30KB, sind sie gösser, hängen sich die Clients auf.
Gleicher Sende-Code unter Windows ohne Probleme.
Sende ich unter Linux 4 Icons am Stück, ca 33 Kb, dann hängen sich die Clients auf.
Ich weis nicht was Linux da macht.
Wie kann ich Images mit PB ohne String als Rohdaten an die Clients senden?
Mit SendNetworkData() habe ich es auch schon probiert (allerdings nur den SendeString in den Speicher geschrieben und dann mit SendNetworkData() gesendet), es ist gehupft wie gedupft.
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Antworten