Hallo Experten!!
Ich verwende Graphics32 mit inkludiertem Filter zum Resizen von Images nach folgenden Muster:
Delphi-Quellcode:
function TfmMain.RescalePic(aFileName: String; aPic: TImage; aCount: Integer): TBitmap;
Var
R: TKernelResampler;
ASrcImage: TBitMap32;
ADstImage: TBitMap32;
ABmp: TBitMap;
AJPeg: TJPegImage;
AScale: Extended;
lPageIndex : Integer;
begin
// Zum Abspeichern als Jpeg
AJPeg := TJPEGImage.Create;
// als Buffer von TImage32 zu TJpeg
ABmp := TBitMap.Create;
// Originalbild
ASrcImage := TBitmap32.Create;
// verkleinertes Bild
ADstImage := TBitMap32.Create;
Screen.Cursor := crHourGlass;
try
// Datei laden
ASrcImage.LoadFromFile(aFileName);
// Skalierungsfaktor (z.B. 0.5 zum Verkleinern auf 50 %
// in diesem Beispiel wir das Bild max. 300 Pixel breit oder hoch sein
//AScale := (300 / Max(ASrcImage.Width, ASrcImage.Height));
// Zielbild Größe einstellen
ADstImage.Width := 300;//Round(ASrcImage.Width * AScale);
ADstImage.Height := 400;//Round(ASrcImage.Height * AScale);
R := TKernelResampler.Create(ASrcImage);
//R.Kernel := TLanczosKernel.Create;
lPageIndex := pcMinimize.ActivePageIndex;
R.Kernel := fFilter[aCount].Create;
// Zielbild ist fertig
ADstImage.Draw(ADstImage.BoundsRect, ASrcImage.BoundsRect, ASrcImage);
// direkt geht es leider nicht in das AJpeg
ABmp.Assign(ADstImage);
//if AJPeg.CompressionQuality <> defJpegQuality then
//AJPeg.CompressionQuality := defJpegQuality;
//AJPeg.Assign(ABmp);
aPic.Picture.Bitmap := ABmp;
result := ABmp;
// TDMImmoBild(DataModule).StoreImages(AJPeg);
//AJPeg.SaveToFile('C:\Dokumente und Einstellungen\Thomas\Desktop\reklame1.jpg');
finally
Application.ProcessMessages;
Screen.Cursor := crDefault;
AJPeg.Free;
//ABmp.Free;
ADstImage.Free;
ASrcImage.Free;
end;
end;
Nun das funktioniert ja auch alles ganz schön, wenn man 32-bit-Images darstellen kann. Für meine Anwendung kann ich aber nicht immer blind davon ausgehen, daß die Graphikkarten auf Kundenrechnern 32-bit darstellen können.
Wir haben auch noch einen antiken Win95-Rechner für Testzwecke herumstehen und der meckert sobald die Draw-Methode von TBitmap32 aufgerufen wird. Auch kein Wunder, denn ein Blick auf die Bildschirmoptionen verrät, daß er nur 16- bzw. 24 bit darstellen kann.
Nun suche ich nach einer Art 'Ersatzlösung' für genau diese, wenn auch sicherlich wenige Fälle.
Daher meine Frage: Was würdet ihr für die Fälle tun, wo der Rechner keine 32-bit Farben dastellen kann??
LG
Thomas