Mit diesen beiden Proceduren en- und decode ich die Bilder.
Code: Alles auswählen
Procedure.s EncodeImageToString(*ImageFromMemory, SizeOfImage)
Protected Result.s, Length
;wir holen uns mehr als genug speicher, wir haben's ja...
Result = Space(64 + SizeOfImage * 1.5)
Length = Base64Encoder(*ImageFromMemory, SizeOfImage, @Result, Len(Result))
CompilerIf #PB_Compiler_Unicode
Result = PeekS(@Result, Length, #PB_Ascii)
CompilerElse
Result = Left(Result, Length)
CompilerEndIf
ProcedureReturn Result
EndProcedure
Procedure DecodeStringToImage(String.s)
Protected *Buffer, L, *StringAscii, Image
*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
Image = CatchImage(#PB_Any, *Buffer, L)
EndIf
FreeMemory(*Buffer)
EndIf
ProcedureReturn Image
EndProcedure
Wenn der Doko-Server unter Linux (mit Fenstern) an die Clients sendet, bleibt er spätestens nach dem dritten Bild hängen und nichts passiert mehr.
Wenn der Doko-Server unter WINDOWS an die Clients sendet, funktioniert alles wunderbar. (Exakt gleicher Code wie unter Linux).
Der Befehl "SAVEIMAGE ()" benötigt unter Linux eine Fensterverwaltung und ist somit NICHT für einen vServer geeignet.
Gegenteilige Behauptungen möge man mir bitte mit kleinem Code beweisen.
Thema ist für mich erledigt.
Ich lasse den Server auf Windows laufen.
Ich programmiere nur noch mit Linux.
Linux Mint 21.x