AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bitmap aus Stream lesen

Ein Thema von Zodi · begonnen am 16. Jun 2018 · letzter Beitrag vom 18. Jun 2018
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Zodi
Zodi

Registriert seit: 19. Jul 2017
Ort: Berlin
47 Beiträge
 
Delphi XE7 Ultimate
 
#1

Bitmap aus Stream lesen

  Alt 16. Jun 2018, 18:54
Hi Delphianer

Ich versende über die sockets ein bmp Bild.

Wenn ich die Daten empfange und in eine Datei schreibe und als .bmp abspeichere kann ich die Bilddatei anschauen.
Aber sobals ich den Stream in eine Timage lade wird nichts angezeigt.

Delphi-Quellcode:
    stream := tmemorystream.Create;
    stream.WriteBuffer(pointer(data)^,length(data));
    stream.Position := 0;

    assignfile(f, 'C:\00\testbild.bmp');
    rewrite(f);
    writeln(f, data);
    closefile(f);


 // Image1.Picture.LoadFromFile('c:\00\testbild.bmp');

      Image1.Picture.Bitmap.LoadFromStream(Stream);

  end;
Was mach ich da falsch das ich mit Image1.Picture.Bitmap.LoadFromStream(Stream); nichts angezeigt bekomme?

Grüsse Zodi
Pascal
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Bitmap aus Stream lesen

  Alt 16. Jun 2018, 19:17
Vielleicht fehlt noch ein Image1.Repaint?

edit
also nach dieser Zeile
Image1.Picture.Bitmap.LoadFromStream(Stream);
Falls das unkklar sein sollte.
Gruß vom KodeZwerg

Geändert von KodeZwerg (16. Jun 2018 um 19:24 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: Bitmap aus Stream lesen

  Alt 16. Jun 2018, 19:29
Du musst Position vor dem LoadFromStream erst wieder auf 0 setzen.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Bitmap aus Stream lesen

  Alt 16. Jun 2018, 19:31
stream.Position := 0;
Macht er doch?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: Bitmap aus Stream lesen

  Alt 16. Jun 2018, 19:33
stream.Position := 0;
Macht er doch?
Ich bin blind scheinbar

Probier mal Image.Picture.LoadFromStream statt Image.Picture.Bitmap.LoadFromStream .
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Bitmap aus Stream lesen

  Alt 16. Jun 2018, 19:56
Ich bin der Meinung mal gelesen zu haben das LoadFromFile ein Repaint/Refresh/Update/Redraw/o.ä. automatisch ausführt und ein LoadFromStream nicht, warten wir mal ab was hilft
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.081 Beiträge
 
Delphi 2009 Professional
 
#7

AW: Bitmap aus Stream lesen

  Alt 16. Jun 2018, 22:58
Delphi-Referenz durchsuchenTImage.Picture.Bitmap dürfte zu dem Zeitpunkt gar nicht initialisiert sein (vorher irgendwas mit Delphi-Referenz durchsuchenTImage.Canvas machen wäre auch möglich). Da Delphi den Dateityp einer Bilddatei (für die Auswahl von Delphi-Referenz durchsuchenTGraphicClass) ausschließlich über die Erweiterung bestimmt (die ein Stream nicht hat), musst du die Graphics.TBitmap selbst erstellen. Graphics.TBitmap (es gibt mehrere Klassen in Delphi, die TBitmap heißen) weist man einem Bild zu, indem man TPicture.Assign aufruft (nicht TGraphics.Assign ).

Delphi-Quellcode:
var
  BMP: Graphics.TBitmap;
begin
  TuEtwasMitDem(Stream);

  BMP := Graphics.TBitmap.Create;
  BMP.LoadFromStream(Stream);
  Image1.Picture.Assign(BMP);
  BMP.Free;
end;
Janni
2005 PE, 2009 PA, XE2 PA

Geändert von Redeemer (16. Jun 2018 um 23:03 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

AW: Bitmap aus Stream lesen

  Alt 16. Jun 2018, 23:15
Zitat:
TImage.Picture.Bitmap dürfte zu dem Zeitpunkt gar nicht initialisiert sein
Sobald man auf .Bitmap oder .Icon zugreift, wird es automatisch erstellt, wenn .Graphic nicht diesem Typen entspricht. (leider wird es auch komplett neu erstellt und das ohne Übernahme des alten Bildinhaltes, aber das ist hier ja egal)

Zitat:
Da Delphi den Dateityp einer Bilddatei ausschließlich über die Erweiterung bestimmt
Jupp, darum funktionierte "damals" auch nur Picture.LoadFromFile und nicht LoadFormStream,
außer bei Picture.Graphic.LoadFromStream, wenn man vorher selber für den passenden TGraphic-Typen gesorgt hatte.

Das wurde inzwischen aber behoben (Delphi 10.x) ... allerdings weiß ich grade nicht, ob das nur für FMX gilt, oder ob es auch bei der VCL so ist, aber ich glaub das ist nun bei Beiden so.
$2B or not $2B

Geändert von himitsu (16. Jun 2018 um 23:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Bitmap aus Stream lesen

  Alt 16. Jun 2018, 23:52
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
 MS: TMemoryStream;
begin
  MS := TMemoryStream.Create();
  try
    Image2.Picture.Bitmap.FreeImage; // hab Versucht ein blinken hervorzurufen, klappt nicht, Code zu schnell.
    Image2.Repaint; // hab Versucht ein blinken hervorzurufen, klappt nicht, Code zu schnell.
    Image1.Picture.Bitmap.SaveToStream(MS);
    MS.Position := 0;
    Image2.Picture.Bitmap.LoadFromStream(MS);
    if CheckBox1.Checked then Image2.Repaint;
  finally
    MS.Free;
  end;
end;
Ich habe es einfach mal selbst nach gebaut, vielleicht mache ich ja auch etwas anders als wie Du, auf jeden fall klappt es so ohne Fehler, egal ob Repaint oder nicht. Nun frage ich mich, was ist Deine Quelle?
In meinem Beispiel kopiere ich Imaga1 in Stream und lade den in Image2.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.081 Beiträge
 
Delphi 2009 Professional
 
#10

AW: Bitmap aus Stream lesen

  Alt 17. Jun 2018, 14:49
Das wurde inzwischen aber behoben (Delphi 10.x) ... allerdings weiß ich grade nicht, ob das nur für FMX gilt, oder ob es auch bei der VCL so ist, aber ich glaub das ist nun bei Beiden so.
Wie macht er das jetzt?
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 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