Hallo Leute! Ich habe folgendes Problem:
Ich möchte mit
Indy TCP Server und Client Bilder im Jpeg Format senden und empfangen.
Das senden klappt auch ganz gut aber das Bild lässt sich nach dem auslesen aus dem Stream nicht mehr als Jpeg anzeigen?
Es wird auf der Festplatte als Jpeg gespeichert lässt sich aber nicht mehr aufrufen? Habe festgestellt das das gesendete
Bild immer genau 31 Bytes kleiner ist als das Originalbild! Weis aber nicht warum?
Vielleicht hat einer von euch ne Idee woran das liegen kann. Würde mich sehr freuen wenn ihr mir helfen könntet!
hier der Code:
Delphi-Quellcode:
procedure TfrmMain.Button10Click(Sender: TObject);
var MSGText : String;
var BMPStream : TfileStream;
begin
if ListView1.SelCount = 0 then begin
MessageBox(0, 'Bevor sie eine Bildnachricht abschicken müssen sie ein User auswählen!', 'Bildnachricht schicken!', MB_OK or MB_ICONERROR);
exit;
end else begin
MSGText := Memo2.Lines.DelimitedText;
MSGClient.Host := userIP;
MSGClient.Port := 9003;
MSGClient.Connect;
MSGClient.WriteLn('__'+uname+'__');
MSGClient.WriteLn('++'+MSGText+'++');
if MSGClient.Connected then begin
MSGClient.Disconnect;
MSGClient.Host := userIP;
MSGClient.Port := 9003;
MSGClient.Connect;
if FileExists(ExtractFilePath(Application.ExeName)+ 'archiv\MessagePic.jpg') then begin
BMPStream := TfileStream.Create(ExtractFilePath(Application.ExeName)+ 'archiv\MessagePic.jpg',fmOpenRead + fmShareDenyNone); //Das Bild wird in den FileStream eingelesen!
MSGClient.OpenWriteBuffer;
MSGClient.WriteStream(BMPStream); //Bild wird geschickt!
MSGClient.CloseWriteBuffer;
MSGClient.Disconnect;
end;
end;
end;
end;
procedure TfrmMain.MSGServerExecute(AThread: TIdPeerThread);
var ftmpStream : TFileStream;
var TCopy : String;
var s : String;
var saveText : TextFile;
var savename : String;
var MSGJpeg : TJpegImage;
begin
MSGcount := MSGcount+1;
s := AThread.Connection.ReadLn;
TCopy := copy(s,1,2);
if Tcopy = '__' then begin
MSGname := s+IntToStr(MSGcount);
end else begin
if TCopy = '++' then begin
savename := ExtractFilePath(Application.ExeName)+'message\'+MSGname+'.txt';
AssignFile(saveText, savename);
{$i-} Rewrite(saveText); {$i+}
if IOResult <> 0 then begin
MessageBox(0, 'Fehler beim speichern der Nachricht!', 'Bildnachricht schicken!', MB_OK or MB_ICONERROR);
exit;
end;
Write(saveText, s);
CloseFile(saveText);
end else begin
try
ftmpStream := TFileStream.Create(ExtractFilePath(Application.ExeName)+'message\'+MSGname+'.jpg',fmCreate);
AThread.Connection.ReadStream(ftmpStream,-1, true); //Der FileStream wird als Jpeg gespeichert. Daten sind da aber das Bild lässt sich nicht öffnen???
finally
MSGJpeg := TJpegImage.Create;
MSGJpeg.LoadFromStream(ftmpStream); //Hier hab ich versucht die Daten direkt vom Stream in das Jpeg zu laden klappt aber nicht? Es werden 0 Bytes übergeben???
FreeAndNil(ftmpStream);
MSGJpeg.SaveToFile(ExtractFilePath(Application.ExeName) + 'message\'+MSGname+'.jpg');
end;
end;
end;
end;
Ich habe es auch schon mit TMemoryStream ausprobiert und es klappt auch nicht??
Kann es daran liegen das die Bilder im Jpeg Format sind? TBitmap wäre allerdings viel zu gross.
Es müsste doch auch mit Jpeg gehen oder???
Gruss an alle
uspegasus