![]() |
Bild in byte umwandeln und speichern / laden
Hallo liebe Delphi Praxis Gemeinde.
Ich brauch mal eure Hilfe. Ich möchte ein Bild in einer Datenbank Speichern, da kam ich auf die Idee das Bild in byte Umzuwandeln und dann zu speichern und wenn ich es brauche es von da zu laden. Nur wie muss ich vorgehen? Ich wäre für Hilfe sehr Dankbar. |
AW: Bild in byte umwandeln und speichern / laden
Wie in Byte umwandeln? Eine Datei, welches Format auch immer, besteht immer aus Bytesa (1/0). Was anderes kennt der Computer nicht.
Nimm ein Blob-Feld und lege die Datei mit Hilfe eines Streams dort ab. |
AW: Bild in byte umwandeln und speichern / laden
Zitat:
|
AW: Bild in byte umwandeln und speichern / laden
@Dejan Vu: Der Kommentar ist themenfremd, zumal das "a" neben dem "s" liegt und darum zum Abrutschen nicht viel gehört - unabhängig davon, daß natürlich immer sinnvoll ist, Beiträge möglichst vor dem Abschicken auf Fehler zu prüfen oder wenigstens danach Korrektur zu lesen.
Zum eigentlichen Thema: Vor längerer Zeit hatte ich mich auch damit befaßt, Grafiken als Blobs zu speichern. Leider sind die letzten Ansätze von 2010 und ich müßte mich erst wieder einarbeiten, zumal ich sehr viele Zusatzkomponenten bzw. Units eingebastelt hatte, die ich erst zusammensuchen müßte. Was mir aber noch in Erinnerung ist: Die Größe der einzelnen Grafiken ist nicht ohne Bedeutung. Am Einfachsten ist das Vorhaben bei Winzgrafiken gleicher Dateigröße, beispielsweise Cursoren, Glyphs und Icons. Weil ich letztlich auch exotische Grafikformate eingebaut hatte, die wohl kaum jemand kennt, war entsprechend erforderlich auch passende Betrachter zu integrieren. Das war damals mit Delphi 5. Leider weiß ich nicht, welche Grafikformate von heutigen Delphi-Versionen standardmäßig berücksichtigt werden. Als Dateiformat hatte ich damals bewußt DBF gewählt und den Zugriff über TDBF gestaltet, statt die dumme "Database Engine" zu benutzen. Aus einer meiner damaligen Kommentardateien kann ich jetzt erstmal diesen Passus schicken, weiß aber nicht, ob das so schon hilft:
Code:
Nächste Woche (früher werde ich nicht dazu kommen) versuche ich mal, meinen damaligen Ansatz weitgehend auf Standardkomponenten/Dateiformate zu reduzieren und dann hier hochladen - es sei denn, jemand anderes hat bereits ein einfaches Beispiel parat und schafft es schneller.
VAR
tmp : TMemoryStream; BildDaten : String; ... BildDaten:=DBF1Bild.value; TMP:=TMemoryStream.Create; TMP.WriteBuffer(bilddaten[1],DBF1Bild.blobsize); Tmp.Position :=0; TRY DBImage1.Picture.BitMap.LoadFromStream(tmp); EXCEPT ... END; tmp.free; |
AW: Bild in byte umwandeln und speichern / laden
Zitat:
![]() |
AW: Bild in byte umwandeln und speichern / laden
Ich würde mir das Leben gar nicht so schwer machen und das mit einer Zeile Code abkaspern:
Delphi-Quellcode:
var
ABitmap: TBitmap; AFieldName: string; SomeDataSet: TDataSet; SomeDataSet.FieldByName( AFieldName ).Assign( ABitmap ); |
AW: Bild in byte umwandeln und speichern / laden
Das ist selbstverständlich weitaus eleganter, wenn's nur um Bitmaps geht. Mit meinen Methode kannst du dagegen alle "Bits und Bytes" in einem Blobfeld speichern, egal ob sich's dabei um eine Bild-, PDF-, Zip- oder Sonstwas-Datei handelt.
|
AW: Bild in byte umwandeln und speichern / laden
Liste der Anhänge anzeigen (Anzahl: 2)
Auch wenn mittlerweile vielleicht einfache Methoden genannt wurden - ich habe das jetzt nicht ausprobiert - möchte ich dem Themenstarter doch mal ein Komplettbeispiel geben. Das ist zwar nicht das komplexe Teil, das ich weiter vorne erwähnt hatte, aber dafür konnte ich es relativ schnell aufs Wesentliche minimieren.
Außer TDBF wird keine Fremdkomponente benötigt. Weil es davon verschiedene Versionen gibt, habe ich sicherheitshalber die angefügt, mit der ich das unter Delphi 5 erstellt habe. Die 2 weiteren Units: "bilder" erzeugt eine leere DBF-Datei, falls noch keine existiert. "FileTools" dient dazu, alle 3 möglichen Datumswerte (erstellt, geändert und letzter Zugriff) identisch zu setzen. Das ist sinnvoll, wenn die in der Datenbank gespeicherten Grafiken wieder mit dem Originaldatum extrahiert werden sollen. Weil diese Unit unabhängig vom Programm ist, kann sie auch anderswo eingesetzt werden. Woher die Quellen dazu stammen, weiß ich nicht mehr. Aber es hatte damit zu tun, daß bei manchen Digitalfotos das Datum der Dateien vom Datum in den EXIF-Angaben abweicht. Benötigte Unterverzeichnisse werden automatisch angelegt, falls nicht vorhanden. Das läßt sich im Quelltext anpassen. Das Beispiel ist speziell auf Glyphs mit 2 enthaltenen Grafiken zugeschnitten. Beim Speichern (Pfad mit passenden Grafiken wählen, in der FileListBox anklicken) werden alle relevanten Daten (Größe, Erstellungsdatum etc.) übernommen. Die in der DBF-Datei enthaltenen Bilder können direkt wieder als Grafiken abgespeichert werden, aber auch als RC-Datei. Außerdem können Textlisten mit den relevanten Daten der in der Datenbank enthaltenen Grafiken erstellt werden. Zum Testen sind 2 kleine Datenbanken enthalten. Ich hoffe, das ist alles weitgehend selbst erklärend und der Themenstarter kann was damit anfangen. |
AW: Bild in byte umwandeln und speichern / laden
Zitat:
Wenn man es unbedingt alleine machen will, dann TImage, wobei man es dann auch mit anderen Grafikformaten füttern könnte. Bild in "ein" Byte umwandeln? Arbeitest du für den CIA (TV-Version)? Die holen auch ein detailreiches Bild aus einem Pixel raus. |
AW: Bild in byte umwandeln und speichern / laden
Wo schrieb denn der Themenstarter, daß es ein Byte sein sollte ? Ich finde solche themenfremden Lästerkommentare immer störend, weil sie keinem nutzen ! Natürlich meinte er Bytes.
Was das Zitat meiner kurzen Sequenz betrifft, so sollte das nur eine erste Hilfe sein. Aber glaube mir, es kann durchaus Gründe haben, auf unterschiedliche Weise auf Images zuzugreifen. Mir geht es grundsätzlich drum, damit auch mehr machen zu können, als sie bloß zu speichern und zu laden. Dir steht frei - und anderen natürlich auch - das von mir zur Verfügung gestellte Beispiel nach eigenen Wünschen umzugestalten.:lol: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:40 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