AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Picture aus DBImage in Stream um Größe festzustellen

Picture aus DBImage in Stream um Größe festzustellen

Ein Thema von AndreT · begonnen am 28. Nov 2004 · letzter Beitrag vom 30. Nov 2004
Antwort Antwort
AndreT

Registriert seit: 5. Nov 2004
Ort: Bocholt
82 Beiträge
 
Delphi 2006 Enterprise
 
#1

Picture aus DBImage in Stream um Größe festzustellen

  Alt 28. Nov 2004, 12:31
Ich möchte mit einem ähnlichen Code wie diesen die Größe eines bmp´s bestimmen.

Code:
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;
ich möchte allerings nicht wie in dem Code eine OpenDiaolog verwenden, sondern das aktuelle Bild einen DBIMages.
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
Andre
  Mit Zitat antworten Zitat
Moyyer

Registriert seit: 31. Mai 2003
155 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Picture aus DBImage in Stream um Größe festzustellen

  Alt 29. Nov 2004, 15:33
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
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Picture aus DBImage in Stream um Größe festzustellen

  Alt 29. Nov 2004, 15:38
Was spricht gegen TDBImage.Picture.Bitmap.Width bzw. .Height?
(Ist heute großes F1-Tastensterben angesagt? )
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#4

Re: Picture aus DBImage in Stream um Größe festzustellen

  Alt 29. Nov 2004, 16:54
dizzy,

was spricht gegen richtig lesen?

raik
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Picture aus DBImage in Stream um Größe festzustellen

  Alt 29. Nov 2004, 17:14
Ich habe das hier als Frage angesehen:
Zitat von AndreT:
Ich möchte mit einem ähnlichen Code wie diesen die Größe eines bmp´s bestimmen.
Und das hier garnicht mehr gesehen...
Zitat von AndreT:
Aber wie bekomme ich das Bild erstmal in den den Stream?
Jedoch: Er braucht das Bild selbst doch garnicht in der Datenbank - er will doch nur die Größe haben! Und das aus dem BMP-Header auszulesen ist doch etwas umständlich, oder?


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
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
AndreT

Registriert seit: 5. Nov 2004
Ort: Bocholt
82 Beiträge
 
Delphi 2006 Enterprise
 
#6

Re: Picture aus DBImage in Stream um Größe festzustellen

  Alt 30. Nov 2004, 06:01
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
Andre
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#7

Re: Picture aus DBImage in Stream um Größe festzustellen

  Alt 30. Nov 2004, 06:44
Du kannst das Bild auch in einen MemoryStream speichern und dann dessen Größe auslesen.

Delphi-Quellcode:
var
  Mem: TMemoryStream;
begin
  Mem:=TmemoryStream.Create;
  dbimage1.Picture.SaveToStream(Mem);
  Mem.Position:=0;
  Mem.Read(...);
  Mem.Free;
end;
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.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von Orbmu2k
Orbmu2k

Registriert seit: 29. Nov 2004
Ort: Erfurt
254 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Picture aus DBImage in Stream um Größe festzustellen

  Alt 30. Nov 2004, 07:35
ungetestet, sollte dir aber die grösse zurückgeben ...

   DataModule1.ADOTable.CreateBlobStream(DataModule1.ADOTable.FieldByName('Bild'),bmRead).Size
  Mit Zitat antworten Zitat
AndreT

Registriert seit: 5. Nov 2004
Ort: Bocholt
82 Beiträge
 
Delphi 2006 Enterprise
 
#9

Re: Picture aus DBImage in Stream um Größe festzustellen

  Alt 30. Nov 2004, 16:02
Danke,

der letzte einzeiler hat geholfen

es muss dazu nur auf jeden fall die uses db hinzugefügt werden.
Andre
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#10

Re: Picture aus DBImage in Stream um Größe festzustellen

  Alt 30. Nov 2004, 16:51
Zitat von Orbmu2k:
ungetestet, sollte dir aber die grösse zurückgeben ...

   DataModule1.ADOTable.CreateBlobStream(DataModule1.ADOTable.FieldByName('Bild'),bmRead).Size
Bin mir nicht sicher, aber hinterlässt das nicht ein hässliches Speicherleck, weil der erstellte Stream doch nicht freigegeben wird
Wenn dann wird ich es so machen:

Delphi-Quellcode:
with DataModule1.ADOTable.CreateBlobStream(DataModule1.ADOTable.FieldByName('Bild'),bmRead) do
begin
  MySize:=Size;
  Free;
end;
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 07:33 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