MyStream.Write(PicStream, Len);
speichert den Objekt-Zeiger und nicht den Stream-Inhalt.
Warum nicht einfach CopyFrom, bzw. warum nicht direkt in den FileStream?
String =
Unicode, seit Delphi 2009
Unicode = 2 Byte pro Zeichen
du speicherst und ließt aber nur 1 Byte pro Zeichen ... heißt also zu vergißt die Hälft.
Bytes = Length(S) * SizeOf(Char)
für
String
Aber in deinem Fall einfach AnsiString oder besser och RawByteString verwenden.