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.