Einzelnen Beitrag anzeigen

Benutzerbild von Flogo
Flogo

Registriert seit: 24. Mär 2003
Ort: Freiburg im Breisgau
317 Beiträge
 
Delphi 7 Professional
 
#2

Re: Mehrere TJpegImage in einen Stream

  Alt 18. Mai 2005, 22:38
Hat sich erledigt mir ist doch noch was eingefallen.
Wenns noch jemand interessiert ist hier meine Lösung (als Erweiterung des FileStreams)

Delphi-Quellcode:
procedure TFileStreamEx.WritePicture(Pic: TPicture);
var
  Typ: Byte;
  Len: Integer;
  MS: TMemoryStream;
begin
  if Pic.Graphic is TBitmap then
  begin
    Typ := FILETYPE_BMP;
    Write(Typ, SizeOf(Typ));
    Pic.Bitmap.SaveToStream(self);
  end
  else if Pic.Graphic is TJpegImage then
  begin
    Typ := FILETYPE_JPG;
    Write(Typ, SizeOf(Typ));
    MS := TMemoryStream.Create;
    try
      Pic.Graphic.SaveToStream(MS);
      Len := MS.Size;
      WriteInteger(Len);
      CopyFrom(MS, 0);
    finally
      MS.Free;
    end;
  end;
end;

procedure TFileStreamEx.ReadPicture(Pic: TPicture);
var
  Typ: Byte;
  Len: Integer;
  MS: TMemoryStream;
begin
  Read(Typ, SizeOf(Typ));
  if Typ = FILETYPE_BMP then
  begin
    Pic.Bitmap := TBitmap.Create;
    Pic.Bitmap.LoadFromStream(self);
  end
  else if Typ = FILETYPE_JPG then
  begin
    Pic.Graphic := TJpegImage.Create;
    Len := ReadInteger;
    MS := TMemoryStream.Create;
    try
      MS.CopyFrom(self, Len);
      MS.Position := 0;
      Pic.Graphic.LoadFromStream(MS);
    finally
      MS.Free;
    end;
  end;
end;
[Edit]
FILETYPE_BMP und FILETYPE_JPG sind Byte-Konstanten
WriteInteger/ReadInteger gehören auch zu meinem FileStreamEX und sind nur zur leichteren Bedinung da[/Edit]
If one coincidence can occur, then another coincidence can occur. And if one coincidence happens to occur just after another coincidence, then that is just a coincidence.
DNA

www.Anyxist.de
  Mit Zitat antworten Zitat