Einzelnen Beitrag anzeigen

Benutzerbild von Legolas
Legolas

Registriert seit: 28. Sep 2003
Ort: Frankfurt am Main
72 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Probleme beim auslesen eines JPG aus einer DB

  Alt 8. Okt 2003, 20:05
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.
Grüße Legolas

Wissen ist Macht.
Wir wissen nichts, macht nichts.
  Mit Zitat antworten Zitat