Einzelnen Beitrag anzeigen

uspegasus

Registriert seit: 8. Okt 2004
3 Beiträge
 
#1

Indy/TCP Probleme mit senden von JPG Bildern

  Alt 12. Okt 2004, 19:50
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
  Mit Zitat antworten Zitat