AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Bild in byte umwandeln und speichern / laden
Thema durchsuchen
Ansicht
Themen-Optionen

Bild in byte umwandeln und speichern / laden

Ein Thema von CrashBack · begonnen am 28. Okt 2015 · letzter Beitrag vom 29. Okt 2015
Antwort Antwort
Benutzerbild von CrashBack
CrashBack

Registriert seit: 17. Dez 2007
Ort: Norge Oslo
58 Beiträge
 
#1

Bild in byte umwandeln und speichern / laden

  Alt 28. Okt 2015, 01:46
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.

Geändert von CrashBack (28. Okt 2015 um 02:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Bild in byte umwandeln und speichern / laden

  Alt 28. Okt 2015, 02:14
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#3

AW: Bild in byte umwandeln und speichern / laden

  Alt 28. Okt 2015, 06:37
Eine Datei, ... besteht immer aus Bytesa (1/0). Was anderes kennt der Computer nicht.
Ich hoffe, der Computer kennt etwas anderes als Bytesa (1/0). Sagen wir: Bits. Oder Bytes.
  Mit Zitat antworten Zitat
delnu
(Gast)

n/a Beiträge
 
#4

AW: Bild in byte umwandeln und speichern / laden

  Alt 28. Okt 2015, 09:24
@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:
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;
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.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#5

AW: Bild in byte umwandeln und speichern / laden

  Alt 28. Okt 2015, 09:26
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.
Hier werden Sie geholfen.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Bild in byte umwandeln und speichern / laden

  Alt 28. Okt 2015, 11:40
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 );
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#7

AW: Bild in byte umwandeln und speichern / laden

  Alt 28. Okt 2015, 16:43
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.
  Mit Zitat antworten Zitat
delnu
(Gast)

n/a Beiträge
 
#8

AW: Bild in byte umwandeln und speichern / laden

  Alt 28. Okt 2015, 22:43
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.
Angehängte Dateien
Dateityp: zip GLYPH_DBF.ZIP (464,1 KB, 7x aufgerufen)
Dateityp: zip tdbf691.zip (189,0 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Bild in byte umwandeln und speichern / laden

  Alt 29. Okt 2015, 10:04
Aus einer meiner damaligen Kommentardateien kann ich jetzt erstmal diesen Passus schicken, weiß aber nicht, ob das so schon hilft:
Code:
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;
Ein TDBImage kann direkt an die DataSource gehängt werden und holt sich das BitMap von alleine da raus.

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
delnu
(Gast)

n/a Beiträge
 
#10

AW: Bild in byte umwandeln und speichern / laden

  Alt 29. Okt 2015, 10:24
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.

Geändert von delnu (29. Okt 2015 um 10:26 Uhr) Grund: Schreibfehler korrigiert
  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 22: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