Einzelnen Beitrag anzeigen

Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: einfach jpges verkleiner (bild und filesize) ?

  Alt 2. Dez 2006, 12:43
Hallo,

ich habe es realisiert mit Graphics32.

Delphi-Quellcode:
procedure TFRMEdtImmoBild.LoadAndConvertImage(const AFileName: string);
Var
  R: TKernelResampler;
  ASrcImage: TBitMap32;
  ADstImage: TBitMap32;
  ABmp: TBitMap;
  AJPeg: TJPegImage;
  AScale: Extended;
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 := Round(ASrcImage.Width * AScale);
    ADstImage.Height := Round(ASrcImage.Height * AScale);

    R := TKernelResampler.Create(ASrcImage);
    R.Kernel := TLanczosKernel.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);

    // TDMImmoBild(DataModule).StoreImages(AJPeg);
    // Speichern AJPeg.SaveToFile ???

  finally
    Application.ProcessMessages;
    Screen.Cursor := crDefault;
    AJPeg.Free;
    ABmp.Free;
    ADstImage.Free;
    ASrcImage.Free;
  end;
end;
Cu, Frank
Frank Reim
  Mit Zitat antworten Zitat