AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi PNG-Bild aus BLOB-Feld in Image laden
Thema durchsuchen
Ansicht
Themen-Optionen

PNG-Bild aus BLOB-Feld in Image laden

Ein Thema von scrat1979 · begonnen am 20. Dez 2010 · letzter Beitrag vom 15. Nov 2020
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#1

PNG-Bild aus BLOB-Feld in Image laden

  Alt 20. Dez 2010, 20:50
Datenbank: Absolute Database • Version: 6 • Zugriff über: ABS-Komponenten
Hallo zusammen,

ich versuche gerade ein PNG-Bild, welches in einem BLOB-Feld einer Datenbank liegt, in eine Image-Komponente zu bekommen. Die Image-Komponente kann auch PNG darstellen, das Laden eines PNG-Bildes mittels OI funktioniert jedenfalls problemlos. Speichere ich das Bild
in einem FileStream und speicher es, dann kann ich es auch problemlos öffnen, also am Zugriff auf die DB oder an einem "korrupten" Header scheint es nicht zu liegen. Nach dem Aufrufen der Funktion erhalte ich eine Zugriffsverletzung...

Delphi-Quellcode:
var
  BlobStream: TStream;
  aq : tabsquery;
begin
      aq := tabsquery.Create(nil);
      aq.DatabaseName := 'xyz';
      aq.SQL.Add('SELECT bild FROM tbltest WHERE id = 1');
      aq.Open;
      BlobStream := aq.CreateBlobStream(aq.FieldByName('bild'),bmRead);
      ImageAnswer.Picture.Graphic.LoadFromStream(BlobStream); // liegt auf der Form!!!
      BlobStream.Free;
      aq.Close;
      aq.Free;
end;
Kann sich jemand vorstellen, warum das nicht funktioniert???

Danke im Voraus,
Michael
Michael Kübler
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: PNG-Bild aus BLOB-Feld in Image laden

  Alt 20. Dez 2010, 20:54
Besser:
aq.SQL.Text := 'SELECT bild FROM tbltest WHERE id = 1'; In welcher Zeile kommt die Zugriffsverletzung
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: PNG-Bild aus BLOB-Feld in Image laden

  Alt 20. Dez 2010, 21:01
Du musst das PNG erst in eine temporäre Instanz der PNG-Imagekomponente laden. TPicture kann nur beim laden aus einer Datei über die Dateiextension das Grafikformat erkennen. Beim Stream als Stream müsste hier noch der Klassenname der entsprechenden Grafikkomponente am Anfangen stehen. Einfach mal ein PNG mit der IDE zuweisen und dann die DFM anschauen. Dort steht etwas in der Art: "TPNGImage" vor den eigentlichen PNG-Stream.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: PNG-Bild aus BLOB-Feld in Image laden

  Alt 21. Dez 2010, 09:27
Du musst das PNG erst in eine temporäre Instanz der PNG-Imagekomponente laden. TPicture kann nur beim laden aus einer Datei über die Dateiextension das Grafikformat erkennen. Beim Stream als Stream müsste hier noch der Klassenname der entsprechenden Grafikkomponente am Anfangen stehen. Einfach mal ein PNG mit der IDE zuweisen und dann die DFM anschauen. Dort steht etwas in der Art: "TPNGImage" vor den eigentlichen PNG-Stream.
Hmmmm, dachte, ich hätte das schonmal versucht. ich werde es im laufe des Tages testen und mein Feedback abgeben

@mkinzler: die Zugriffsverletzung kommt beim "..LoadFromStream(...);". wie gesagt, die gleiche Anweisung mit einem TFileStream funktioniert problemlos. Es müsste wohl tatsächlich ein spezifisches Problem mit dem Laden in die TImage-Komponente sein.

Danke schonmal!
Michael Kübler
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: PNG-Bild aus BLOB-Feld in Image laden

  Alt 21. Dez 2010, 16:29
Du musst das PNG erst in eine temporäre Instanz der PNG-Imagekomponente laden. TPicture kann nur beim laden aus einer Datei über die Dateiextension das Grafikformat erkennen. Beim Stream als Stream müsste hier noch der Klassenname der entsprechenden Grafikkomponente am Anfangen stehen. Einfach mal ein PNG mit der IDE zuweisen und dann die DFM anschauen. Dort steht etwas in der Art: "TPNGImage" vor den eigentlichen PNG-Stream.
UPDATE: Funktioniert perfekt! Hatte damals vergessen, die Unit "PNGImage" einzubinden!! Danke!
Michael Kübler
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#6

AW: PNG-Bild aus BLOB-Feld in Image laden

  Alt 21. Dez 2010, 16:33
Tipp: Nutze doch bitte try-finally-Blöcke:
Delphi-Quellcode:
aq := tabsquery.Create(nil);
try
  // Tue etwas mit aq
finally
  aq.Free;
end;
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: PNG-Bild aus BLOB-Feld in Image laden

  Alt 21. Dez 2010, 17:45
Tipp: Nutze doch bitte try-finally-Blöcke:
Delphi-Quellcode:
aq := tabsquery.Create(nil);
try
  // Tue etwas mit aq
finally
  aq.Free;
end;
Schon klar Wollte aber nur den wesentlichen Code posten. Trotzdem Danke für den Hinweis, Deep-Sea!!!
Michael Kübler
  Mit Zitat antworten Zitat
Laaeris

Registriert seit: 10. Dez 2011
24 Beiträge
 
#8

AW: PNG-Bild aus BLOB-Feld in Image laden

  Alt 2. Sep 2020, 11:14
Du musst das PNG erst in eine temporäre Instanz der PNG-Imagekomponente laden. TPicture kann nur beim laden aus einer Datei über die Dateiextension das Grafikformat erkennen. Beim Stream als Stream müsste hier noch der Klassenname der entsprechenden Grafikkomponente am Anfangen stehen. Einfach mal ein PNG mit der IDE zuweisen und dann die DFM anschauen. Dort steht etwas in der Art: "TPNGImage" vor den eigentlichen PNG-Stream.
UPDATE: Funktioniert perfekt! Hatte damals vergessen, die Unit "PNGImage" einzubinden!! Danke!
Ich habe sicher nicht genug Erfahrung, jedenfalls verstehe ich nicht, wie Dein endgültiger Ladecode nun aussieht. Kannst Du ihn vielleicht einmal posten?
Speicherst Du PNG auch im Blobfeld und ist der Code, wenn ja, "äquivalent"?

Liebe Grüße,

David
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd
Online

Registriert seit: 17. Feb 2005
Ort: Weitingen
679 Beiträge
 
Delphi 12 Athens
 
#9

AW: PNG-Bild aus BLOB-Feld in Image laden

  Alt 3. Sep 2020, 09:31
Delphi-Quellcode:
var png: TPngImage;

...
  png := TPngImage.Create;
  png.LoadFromStream(BlobStream);
  Picture.Graphic.Assign(png);
...
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: PNG-Bild aus BLOB-Feld in Image laden

  Alt 3. Sep 2020, 10:48
Alte Delphis schauten immer nur auf die Dateiendung, also nur im Picture.LoadFromFile,
aber seit einer Weile ist im Picture.LoadFromStream ein Code drin, der auf die MagicBytes (FileHeader) guckt.

Drum geht es jetzt auch direkt mit Image.Picture.LoadFromStream(BlobStream); ,
ohne dass man vorher selber im Image.Picture.Graphic den "richtigen" Typ bereitstellen muss.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  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 16:40 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