AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

JPG in TBlobField

Ein Thema von Poolspieler · begonnen am 27. Sep 2004 · letzter Beitrag vom 28. Sep 2004
Antwort Antwort
Seite 1 von 2  1 2      
Poolspieler

Registriert seit: 9. Aug 2004
165 Beiträge
 
Delphi 10.3 Rio
 
#1

JPG in TBlobField

  Alt 27. Sep 2004, 15:14
Hallo,
ich möchte in einem Blobfeld meiner Accessdatenbankverbindung (Jet 4.0 OLE) Screenshots speichern.

Code:
  DataModule1.kunde.Edit;
  DataModule1.kundeWegbeschreibung.Assign(bild.Picture); // bild ist ein TImage
  DataModule1.kunde.Post;
Das Problem bei obigem Code ist allerdings, dass "bild" anscheinend im Bitmapformat vorliegt - dass heißt, für jeden Datensatz, der ein Bild enthält, werden knapp 1MB verbraten!!! Da ich mit bis zu 100 000 Datensätzen (und mehr) rechne, ist das nicht wirklich befriedigend...

Kann mir jemand sagen, wie ich in einem TBlobfeld eine Grafik im JPEG-Format speichern kann?

Gruß und danke

Poolspieler
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: JPG in TBlobField

  Alt 27. Sep 2004, 15:23
Zitat von Poolspieler:
Hallo,
ich möchte in einem Blobfeld meiner Accessdatenbankverbindung (Jet 4.0 OLE) Screenshots speichern.

Code:
  DataModule1.kunde.Edit;
  DataModule1.kundeWegbeschreibung.Assign(bild.Picture); // bild ist ein TImage
  DataModule1.kunde.Post;
Das Problem bei obigem Code ist allerdings, dass "bild" anscheinend im Bitmapformat vorliegt - dass heißt, für jeden Datensatz, der ein Bild enthält, werden knapp 1MB verbraten!!! Da ich mit bis zu 100 000 Datensätzen (und mehr) rechne, ist das nicht wirklich befriedigend...

Kann mir jemand sagen, wie ich in einem TBlobfeld eine Grafik im JPEG-Format speichern kann?

Gruß und danke

Poolspieler
Verwende TJpegImage:
Delphi-Quellcode:
jp := TJpegImage.create;
jp.Assign(bild.Picture);
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Poolspieler

Registriert seit: 9. Aug 2004
165 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: JPG in TBlobField

  Alt 27. Sep 2004, 15:31
Hi,
ich möchte aber erstmal das vorhandene bild (also den Screenshot) IN die Datenbank schreiben, wobei bei unten stehenden Code eine Exception ausgelöst wird:
EInvalidGraphic --> Bitmap ist ungültig

Delphi-Quellcode:
var
   quelle, ziel_bild: TRect;
   bild: TImage;
   jpg: TJPEGImage;
begin
  bild := TImage.Create(self);
  bild.Width := WebBrowser1.Width;
  bild.Height := WebBrowser1.Height;

  quelle.Left := WebBrowser1.Left;
  quelle.Top := WebBrowser1.Top;
  quelle.Right := WebBrowser1.Width + WebBrowser1.Left;
  quelle.Bottom := WebBrowser1.Height + WebBrowser1.Top;

  ziel_bild.Left := 0;
  ziel_bild.Top := 0;
  ziel_bild.Right := WebBrowser1.Width;
  ziel_bild.Bottom := WebBrowser1.Height;

  // hier wird der eigentliche Screenshot meines Progammfensters gemacht
  bild.Canvas.CopyRect(ziel_bild, Hauptfenster.wegbeschreibung.Canvas, quelle);

  // Umwandlung des obigen Screenshots in ein jpg
  jpg := TJPEGImage.Create;
  jpg.Performance := jpBestQuality;
  jpg.CompressionQuality := 80;
  jpg.Assign(bild.Picture.Graphic);

  // speichern des JPG in die Datenbank --> des geht aber irgendwie net ;-((
  DataModule1.kunde.Edit;
// DataModule1.kundeWegbeschreibung.Assign(bild.Picture); // so würde es gehen, aber mit viiiel zu großen Datensätzen...
  DataModule1.kundeWegbeschreibung.Assign(jpg); // HIER kommt die Exception **********************************************!!!!!
  DataModule1.kunde.Post;
end;
Ich hoffe, Du verstehst jetzt mein Problem (beim ersten Versuch wollte ich euch nur den gesamten Code ersparen...

Gruß

Poolspieler
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: JPG in TBlobField

  Alt 27. Sep 2004, 15:47
Zitat von Poolspieler:
Hi,
ich möchte aber erstmal das vorhandene bild (also den Screenshot) IN die Datenbank schreiben, wobei bei unten stehenden Code eine Exception ausgelöst wird:
Delphi-Quellcode:
var
  DataModule1.kundeWegbeschreibung.Assign(jpg); // HIER kommt die Exception end;
Ich hoffe, Du verstehst jetzt mein Problem (beim ersten Versuch wollte ich euch nur den gesamten Code ersparen...

Gruß

Poolspieler
Wie ist denn das Blob-Feld definiert (BlobType) ? Ich glaube das Assign beim ftGraphic unterstützt nur Bitmaps. Und da Du kein Bitmap sondern ein Jpeg assignesd, knallt es. Versuche es doch mit Streams. (TMemoryStream.Create, jpg.SaveToStream(MemStream), kundeWegBeschreibung.LoadFromstream(MemStream))
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Poolspieler

Registriert seit: 9. Aug 2004
165 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: JPG in TBlobField

  Alt 27. Sep 2004, 15:52
fieldtype ist fkData
und
blobtype ist ftBlob

mit einem Memorystream hab ich es auch schon mal probiert, aber auch da hat es von mysteriösen Exceptions nur so gehagelt...

Als es mit Bitmap funktioniert hab ich mich erstmal gefreut (bis ich die Dateigröße entdeckte...)


--> Gibt es irgendwo vielleicht ein brauchbares Beispiel zum Memorystream?

Gruß

Poolspieler
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: JPG in TBlobField

  Alt 27. Sep 2004, 16:17
Zitat von Poolspieler:
fieldtype ist fkData
und
blobtype ist ftBlob

mit einem Memorystream hab ich es auch schon mal probiert, aber auch da hat es von mysteriösen Exceptions nur so gehagelt...

Als es mit Bitmap funktioniert hab ich mich erstmal gefreut (bis ich die Dateigröße entdeckte...)


--> Gibt es irgendwo vielleicht ein brauchbares Beispiel zum Memorystream?

Gruß

Poolspieler
So geht's:

Delphi-Quellcode:
      bild.Canvas.CopyRect(tr, Canvas, tr);
      jpg.Assign(bild.Picture.Graphic);
      jpg.Compress;

      jpg.SaveToStream(ms);

      tblPicture.Edit;
      tblPictureGrafik.LoadFromStream(ms);
      // Nur als Nachweis, dass im jpg-Objekt auch wirklich was gespeichert ist
      jpg.SaveToFile('c:\temp\test.jpg');
      tblPicture.Post;
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Poolspieler

Registriert seit: 9. Aug 2004
165 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: JPG in TBlobField

  Alt 27. Sep 2004, 16:27
Hi,
danke für Deine Antwort, doch leider kommt immernoch die selbe Fehlermeldung bei folgendem Befehl:
  DataModule1.kundeWegbeschreibung.LoadFromStream(ms);
Zitat:
Bitmap ist ungültig


--> in test.jpg ist die korrekte Grafik...

Fällt noch jemandem was ein?
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: JPG in TBlobField

  Alt 27. Sep 2004, 16:30
[quote="Poolspieler"]Hi,
danke für Deine Antwort, doch leider kommt immernoch die selbe Fehlermeldung bei folgendem Befehl:
  DataModule1.kundeWegbeschreibung.LoadFromStream(ms);
Zitat:
Bitmap ist ungültig
Ich habe den obigend Code nicht einfach so hingeschrieben, sondern in einem Beispielprojekt getestet. Bei mir bläht er fleissig die Datenbank auf, es kommt auch keine Fehlermeldung.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#9

Re: JPG in TBlobField

  Alt 27. Sep 2004, 16:39
Was für ein Blob ist denn das in der DB und ist da vieleicht ein TDBImage dran oder sowas.

Hier noch mal der ganze code um daten in ein Blob Feld zu schreiben.

Delphi-Quellcode:
Var
 Stream : TStream;
Begin
  STREAM:=Table.CreateBlobStream(FieldByName('blob'),bmWrite);
  Try
    Stream.LOadFormFile('bild.jpg'); //Mann kann auch den JPG Stream Hierher Kopieren.
  finally
    Stream.Free;
  End;
End;
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Poolspieler

Registriert seit: 9. Aug 2004
165 Beiträge
 
Delphi 10.3 Rio
 
#10

Re: JPG in TBlobField

  Alt 28. Sep 2004, 12:03
Hi,
ich habs jetzt aufgegeben
Es funktioniert wahrscheinlich nicht, weil es im Hintergrund eine mistige Accessdatenbank ist. In diese Datenbank habe ich für das Feld "OLE-Objekt" angegeben. Und genau dieses OLE-Objekt kann wahrscheinlich kein JPG

Ich hab jetzt aber auch keine Lust mehr, mich mit diesem leidigen Thema zu beschäftigen und bin deshalb auf eine Notlösung umgestiegen:
Ich habe einfach ein Verzeichnis angelegt, in dem ich die Bilder speichere - und bei jedem Anzeigen eines neuen Datensatzes lade ich eben das (eventuell vorhandene...) Bild.

Einziges Problem dieser Methode:
Windoofs ist ja auf 32000 Dateien in einem Verzeichnis beschränkt - aber dann muss ich halt noch mit Unterverzeichnissen arbeiten...

Gruß und danke für eure Antworten

Poolspieler
Andreas
  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 00:57 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