![]() |
JPG in TBlobField
Hallo,
ich möchte in einem Blobfeld meiner Accessdatenbankverbindung (Jet 4.0 OLE) Screenshots speichern.
Code:
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...
DataModule1.kunde.Edit;
DataModule1.kundeWegbeschreibung.Assign(bild.Picture); // bild ist ein TImage DataModule1.kunde.Post; Kann mir jemand sagen, wie ich in einem TBlobfeld eine Grafik im JPEG-Format speichern kann? Gruß und danke Poolspieler |
Re: JPG in TBlobField
Zitat:
Delphi-Quellcode:
jp := TJpegImage.create;
jp.Assign(bild.Picture); |
Re: JPG in TBlobField
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:
Ich hoffe, Du verstehst jetzt mein Problem (beim ersten Versuch wollte ich euch nur den gesamten Code ersparen...
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; Gruß Poolspieler |
Re: JPG in TBlobField
Zitat:
|
Re: JPG in TBlobField
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... :cry: 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 |
Re: JPG in TBlobField
Zitat:
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; |
Re: JPG in TBlobField
Hi,
danke für Deine Antwort, doch leider kommt immernoch die selbe Fehlermeldung bei folgendem Befehl:
Delphi-Quellcode:
DataModule1.kundeWegbeschreibung.LoadFromStream(ms);
Zitat:
--> in test.jpg ist die korrekte Grafik... Fällt noch jemandem was ein? :pale: |
Re: JPG in TBlobField
[quote="Poolspieler"]Hi,
danke für Deine Antwort, doch leider kommt immernoch die selbe Fehlermeldung bei folgendem Befehl:
Delphi-Quellcode:
DataModule1.kundeWegbeschreibung.LoadFromStream(ms);
Zitat:
|
Re: JPG in TBlobField
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; |
Re: JPG in TBlobField
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 :wall: 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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:17 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 by Thomas Breitkreuz