![]() |
Picture aus DBImage in Stream um Größe festzustellen
Ich möchte mit einem ähnlichen Code wie diesen die Größe eines bmp´s bestimmen.
Code:
ich möchte allerings nicht wie in dem Code eine OpenDiaolog verwenden, sondern das aktuelle Bild einen DBIMages.
procedure TForm1.Button1Click(Sender: TObject);
var fileheader : TBitmapfileheader; s : TFilestream; begin if openpicturedialog1.Execute then begin s := TFilestream.Create(openpicturedialog1.FileName,fmOpenRead or fmShareDenyNone); s.Read(fileheader,sizeof(fileheader)); s.free; listbox1.Items.Clear; listbox1.items.add('Dateigröße: ' + inttostr(fileheader.bfSize)); end; end; Anschließend möchte ich die Größe in eine Datenbank schreiben. wenn ich aber "s:= TFilestream.create(dbimage.picture.bitmap)" versuche bekomme ich einen Fehler. Was hab ich noch für Möglicheiten? Nachher möchte ich mit "DataModule1.ADOTable.FieldValues['Groesse']:=IntToStr(fileheader.bfSIze)" in die Datenbank schreiben. Das dürfte kein Problem darstellen. Aber wie bekomme ich das Bild erstmal in den den Stream? Danke |
Re: Picture aus DBImage in Stream um Größe festzustellen
Du könntest das Bild deines Dbimages erstmal speichern und es dann neu laden, wie z.B.
Code:
procedure TMusik.Button2Click(Sender: TObject);
var fileheader : TBitmapfileheader; s : TFilestream; begin dbimage1.Picture.SaveToFile('c:\xxx.bmp'); s := TFilestream.Create('c:\xxx.bmp',fmOpenRead or fmShareDenyNone); s.Read(fileheader,sizeof(fileheader)); s.free; listbox1.Items.Clear; listbox1.items.add('Dateigröße: ' + inttostr(fileheader.bfSize)); end; Ist nicht die perfekte Lösung, aber sie funktioniert. MfG Moyyer |
Re: Picture aus DBImage in Stream um Größe festzustellen
Was spricht gegen TDBImage.Picture.Bitmap.Width bzw. .Height?
(Ist heute großes F1-Tastensterben angesagt? :gruebel: :zwinker:) |
Re: Picture aus DBImage in Stream um Größe festzustellen
dizzy,
was spricht gegen richtig lesen? raik |
Re: Picture aus DBImage in Stream um Größe festzustellen
Ich habe das hier als Frage angesehen:
Zitat:
Zitat:
Was ich aber nicht bedacht habe: AndreT möchte nicht die Größe des Bildes, sondern wohl die Bytes die es belegt! Dazu musst du erstmal nachschauen von welchem Typ dein Bitmap ist: "TBitmap.PixelFormat". In den meisten Fällen wird es wohl ein pf24Bit, bzw. pf32Bit sein. Also ist die Größe in Bytes (Width*Height*3), bzw. (Width*Height*4). Das Bild erst auf Platte zwischenspeichern um dann den Header auszulesen ist, finde ich, etwas "unschön" ;). (Zumal sich die benötigte Information ja auch anders beschaffen lässt.) Gruss, Fabian |
Re: Picture aus DBImage in Stream um Größe festzustellen
Danke für Eure Hilfe - Versuche.
Hab inzwischen einen ähnlichen Lösungsweg gewählt, wie Moyyer ihn vorgeschlagen hat. Eine andere Lösung habe ich auch nicht gefunden. Ist eine Unschöne Lösung, aber funktioniert. Sorry, das meine Formulierung in der Fragestellung für manche die Größe als BxH erkennen lies. Ich meinte aber wirklich schon den belegten Speicherplatz. Danke |
Re: Picture aus DBImage in Stream um Größe festzustellen
Du kannst das Bild auch in einen MemoryStream speichern und dann dessen Größe auslesen.
Delphi-Quellcode:
Hat den Vorteil, dass du wirklich die Größe bekommst, auch wenn das Bild zum Beispiel komprimiert ist, und sparst dir die Speicherung auf der Platte.
var
Mem: TMemoryStream; begin Mem:=TmemoryStream.Create; dbimage1.Picture.SaveToStream(Mem); Mem.Position:=0; Mem.Read(...); Mem.Free; end; |
Re: Picture aus DBImage in Stream um Größe festzustellen
ungetestet, sollte dir aber die grösse zurückgeben ...
Delphi-Quellcode:
DataModule1.ADOTable.CreateBlobStream(DataModule1.ADOTable.FieldByName('Bild'),bmRead).Size
|
Re: Picture aus DBImage in Stream um Größe festzustellen
Danke,
der letzte einzeiler hat geholfen :bounce1: es muss dazu nur auf jeden fall die uses db hinzugefügt werden. |
Re: Picture aus DBImage in Stream um Größe festzustellen
Zitat:
Wenn dann wird ich es so machen:
Delphi-Quellcode:
with DataModule1.ADOTable.CreateBlobStream(DataModule1.ADOTable.FieldByName('Bild'),bmRead) do
begin MySize:=Size; Free; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 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