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
Benutzerbild von himitsu
himitsu

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

AW: Bitmap aus Stream lesen

  Alt 16. Jun 2018, 22: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.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (16. Jun 2018 um 22:20 Uhr)
  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, 22: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.128 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Bitmap aus Stream lesen

  Alt 17. Jun 2018, 13: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
Benutzerbild von himitsu
himitsu

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

AW: Bitmap aus Stream lesen

  Alt 17. Jun 2018, 14:18
Wie fast alle Anderen auch ... über die Magic-Number.
Also anhand der ersten paar Byte, den Dateityp erkennen.

Bisher wurde zu jedem TGraphic nur die Dateiendung hinterlegt und jetzt eben auch die Magic-Number.
So kann nun auch in Datenbank-Blobs das Bild in verschiedenen Formaten gespeichert und automatisch geladen/angezeigt werden.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Redeemer

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

AW: Bitmap aus Stream lesen

  Alt 17. Jun 2018, 20:07
Wie genau wird die magische Zahl gesetzt? Ist ja wahrscheinlich irgendwo in der initialization . Wie ist das mit Formaten, die theoretisch mehrere magische Zahlen haben? SVG wäre so ein Fall, durch BOM, teilweise alte Header usw.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
496 Beiträge
 
Delphi 12 Athens
 
#6

AW: Bitmap aus Stream lesen

  Alt 18. Jun 2018, 03:20
Wie genau wird die magische Zahl gesetzt? Ist ja wahrscheinlich irgendwo in der initialization . Wie ist das mit Formaten, die theoretisch mehrere magische Zahlen haben? SVG wäre so ein Fall, durch BOM, teilweise alte Header usw.
Nein, dort werden nur Sachen zur Registrierung von Dateitypen gesetzt (Dateierweiterung im speziellen). Die "Magic Numbers" findest du in den jeweiligen Klassen wieder, so ist es dann auch möglich, mehrere oder keine zu implementieren, und Code bleibt zu 100% kompatibel. Die überprüfung der der Zahl(en) wird idR in der Klassenfunktion TGraphic.CanLoadFromStream vorgenommen.
Dennis
  Mit Zitat antworten Zitat
Antwort Antwort


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 15:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz