Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   TImage - TBitmap und TmemoryStream (https://www.delphipraxis.net/167771-timage-tbitmap-und-tmemorystream.html)

bernhard_LA 17. Apr 2012 15:23

TImage - TBitmap und TmemoryStream
 
unten ein kleiner Testcode zum hin und her kopieren von Bildern auf einem TImage in einen TMemoryStream.
Wenn ich in der Delphi IDE zwei *.bmp#s in das TImage lade spielt der Code, wenn ich *.jpg in das TImage lade klappt das ganze nicht mehr.

Warum, ich dachte es egal was die quelle /Image typ war ?


Delphi-Quellcode:

procedure TForm1.Button1Click(Sender: TObject);
var aMemoryStream : TmemoryStream;
    BMemoryStream : TmemoryStream;
begin

    aMemoryStream := TmemoryStream.Create;

    aMemoryStream.Seek(0, soFromBeginning);

    image1.Picture.Graphic.SaveToStream(aMemoryStream);



    bMemoryStream := TmemoryStream.Create;

    bMemoryStream.Seek(0, soFromBeginning);

    image2.Picture.Graphic.SaveToStream(bMemoryStream);


    aMemoryStream.Position := 0;

    bMemoryStream.Position := 0;


    image2.Picture.Graphic.LoadFromStream(aMemoryStream);

    image1.Picture.Graphic.LoadFromStream(bMemoryStream);


    aMemoryStream.Free;


    bMemoryStream.Free;

end;

procedure TForm1.Button2Click(Sender: TObject);
var aMemoryStream : TmemoryStream;
    BMemoryStream : TmemoryStream;
begin

    aMemoryStream := TmemoryStream.Create;

    aMemoryStream.Seek(0, soFromBeginning);

    image1.Picture.Bitmap.SaveToStream(aMemoryStream);



    bMemoryStream := TmemoryStream.Create;

    bMemoryStream.Seek(0, soFromBeginning);

    image2.Picture.bitmap.SaveToStream(bMemoryStream);


    aMemoryStream.Position := 0;

    bMemoryStream.Position := 0;


    image2.Picture.bitmap.LoadFromStream(aMemoryStream);

    image1.Picture.bitmap.LoadFromStream(bMemoryStream);


    aMemoryStream.Free;


    bMemoryStream.Free;

end;

himitsu 17. Apr 2012 15:36

AW: TImage - TBitmap und TmemoryStream
 
Aus einem Stream bekommt TGraphic das Dateiformat nicht raus.
TGraphic prüft ausschließlich auf Dateiendungen und bei einem Stream gibt es diese ja nicht.

Fazit: Du mußt selber für das Format sorgen,
also in Image.Picture.Graohic das richtige Grafikobjekt laden und dann dorthinein die Grafik.

Nur das Bitmap ist über Image.Picture.Bitmap direkt integriert.

z.B. so in der Art:
Delphi-Quellcode:
Image1.Picture.Graphic := TJpegImage.Create;
Image1.Picture.Graphic.LoadFromStream(...

PS:
Delphi-Quellcode:
MemoryStream.Seek(0, soFromBeginning);
ist übrigens das Selbe wie
Delphi-Quellcode:
MemoryStream.Position := 0;
und direkt nach dem Erstellen eines Streams steht das sowieso schon auf Position 0.

bernhard_LA 17. Apr 2012 16:04

AW: TImage - TBitmap und TmemoryStream
 
Danke , Frage beantwortet

bernhard_LA 24. Apr 2012 21:00

AW: TImage - TBitmap und TmemoryStream
 
als erweiterung/anwendung kann man in einer neuen demo http://sourceforge.net/projects/indy10clieservr/indy 10 tcp client server jetzt "badminton" via tcp spielen ....
die spielregeln darf sich jeder selbst ausdenken


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz