Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Probleme beim auslesen eines JPG aus einer DB (https://www.delphipraxis.net/9867-probleme-beim-auslesen-eines-jpg-aus-einer-db.html)

delos0815 6. Okt 2003 17:02


Probleme beim auslesen eines JPG aus einer DB
 
Hallo

Ich hab das problem das wenn ich versuche ein JPG aus einer SQL DB via DBImage auszulesen immer die meldung bekomme "Bitmap ist ungültig".

Ich habe die unit jpeg eingebunden und es funktioniert trotzdem nicht.

was muss ich tun.

danke im voraus

Delos0815

xbu58 6. Okt 2003 18:07

Re: Probleme beim auslesen eines JPG aus einer DB
 
Hallo Delos

Du must die JPG-Klasse registrieren. Das machst Du am besten im MainModul.
Beispiel:
Delphi-Quellcode:
unit MainUnit;
interface
uses
  Windows,
  ......
  jpeg, GifImage;
....
implementation
....
procedure .....
....
end;

initialization
  RegisterClasses([TBitmap, TGifImage, TJPEGImage]);
end.
Diesee Registrierung ist nur einmal nötig, sie ist also für die ganze Applikation gültig. Ev. hast zusätzlich noch das Problem, dass Du in der DB im gleichen DB-Feld verschiedene Image-Type speichern möchtest. Dann ist es zu empfehlen, dass Du ein Feld hast, in welchem Du sagen kanst, um welchen Type es sich handelt.

Gruss
Xaver

delos0815 6. Okt 2003 18:26

Re: Probleme beim auslesen eines JPG aus einer DB
 
Danke für den Tip, hat aber leider bei mir nicht funktioniert.
Er bringt immer noch die gleiche Fehlermeldung.

aber trotzdem danke

delos0815

neolithos 6. Okt 2003 18:40

Re: Probleme beim auslesen eines JPG aus einer DB
 
da wirst du woll selber das bild in ein Blob speichern müssen. da anscheinend nur bitmaps akzeptiert werden.

Legolas 8. Okt 2003 19:05

Re: Probleme beim auslesen eines JPG aus einer DB
 
Hallo Delos0815,

neolithos hat recht. Ich hatte das gleiche Problem habe es aber es aber letztendlich mit zwei eigenen Proceduren geschafft.

Ich habe das in diesem Forum zwar schon veröffentlicht, da es aber nur eine der beiden Proceduren war poste ich das ganze hier nochmal. Die beiden Proceduren sind zwar auf meine Bedürfnisse angepasst aber ich denke du wirst keine Schwierigkeiten haben sie so zu modifizieren wie du Sie brauchst. Im aktuellen zustand sind sie in der Lage eine JPG-Datei in eine gewünschten Größe zu bringen und zu komprimieren (ist für eine DB nicht unvorteilhaft).

Delphi-Quellcode:
procedure StoreCJPEGImage(Table: TQuery; Field: STRING);
var s : TBlobStream;
    fs: TFileStream;
    ms: TMemoryStream;
    bmp : TBitmap;
    jpeg: TJPEGImage;
begin
  bmp := tbitmap.create;
  jpeg := tjpegimage.create;
  fs := TFileStream.Create(Haupt.CoverDialog.FileName, fmOpenRead);
  s := TBlobStream.create(Table.FieldByName(Field) AS TBlobField, bmWrite);
  ms:=TMemoryStream.Create;
  try
    jpeg.LoadFromStream(fs);
    bmp.assign(jpeg);
    If jpeg.width>jpeg.Height then
    begin
      bmp.width:=400;
      bmp.height:=250;
    end else
    begin
      bmp.width:=250;
      bmp.Height:=400;
    end;
    bmp.canvas.StretchDraw(Rect(0,0,bmp.width,bmp.height),jpeg);
    jpeg.compressionquality := 50;
    jpeg.assign(bmp);
    jpeg.SaveToStream(ms);
  finally
    bmp.free;
    jpeg.free
  end;
  ms.Position:=0;
  s.CopyFrom(ms, ms.Size);
  fs.free;
  s.Free;
end;

procedure LoadCJPEGImage(Table: TQuery; Field: STRING; Image: TImage);
var s : TBlobStream;
    jpg: TJPEGImage;
begin
  if not (Table.FieldByName(Field) AS TBlobField).IsNull THEN
  begin
    s := TBlobStream.create(Table.FieldByName(Field) AS TBlobField, bmRead);
    jpg := TJPEGImage.Create;
    jpg.LoadFromStream(s);
    Image.Picture.Assign(jpg);
    jpg.Free;
    s.Free;
  end else
  begin
    Image.Picture.Assign(NIL);
  end;
end;
Ich denke das hilft dir bei deinem Problem.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:39 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