Image Resize

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
Atomek
Beiträge: 6
Registriert: Di 15. Jun 2010, 12:07

Image Resize

Beitrag von Atomek »

Moin,

als alter Delphi-Programmierer arbeite ich auch immer wieder gerne mit Lazarus und freue mich wie schön sich das entwickelt.

Für meinen FPC-WebGallery-Generator möchte ich Jpegs schön resampeln. Habe das früher mit ImageMagick gemacht, aber das ist etwas umständlich. Daher habe ich folgenden Code ausprobiert:

Code: Alles auswählen

 
var
  Src :TPicture;
  Bmp :TBitmap;
  f :single;
begin
  Src := TPicture.Create;
  Src.LoadFromFile('D:\TEMP\IMG_2018.jpg');
  Bmp := TBitmap.Create;
  Bmp.PixelFormat:=pf24Bit;
 
  f := Src.Width/Src.Height;
 
  Bmp.Width := 1920;
  Bmp.Height := round(Bmp.Width/f);
 
  Bmp.Canvas.Interpolation := TCatromInterpolation.Create;
  Bmp.Canvas.StretchDraw(TRect.Create(0, 0, Bmp.Width, Bmp.Height), Src.Graphic);
  Bmp.SaveToFile('D:\TEMP\IMG_2018_HD_Catrom.bmp');
 


Ich habe also die Interpolation-Objekte "injiziert". Die Ergebnisse waren aber nicht so doll. Wenn ich mit JpgIlluminator (http://www.jpg-illuminator.de/) resize, siehts richtig gut aus. Mache ich was falsch?

Leider habe ich bisher keine Beispiele für den Einsatz fer TFPCustomIntrpolation-Abkömmlinge entdeckt.

bei Delphi kann man die GDIPlus ganz gut nutzen, für die es dort eine schöne API gibt (http://www.bilsen.com/gdiplus/index.shtml). Gibts soetwas auch was für Lazarus?

Ach ja - braucht nur unter Windows laufen.

Liebe Grüße

sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: Image Resize

Beitrag von sstvmaster »

Hi,

hast du mal geschaut ob BGRABitmap das kann? Ist über Online-Package-Manager verfügbar.

LG Maik
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

LazProgger
Beiträge: 63
Registriert: Di 11. Mär 2014, 00:33

Re: Image Resize

Beitrag von LazProgger »

Hast du dir das Projekt einmal angeschaut:

http://imaginglib.sourceforge.net

Atomek
Beiträge: 6
Registriert: Di 15. Jun 2010, 12:07

Re: Image Resize

Beitrag von Atomek »

Jo danke,

funktioniert mit TBGRABitmap

Code: Alles auswählen

 
function Resample(Src :TBgraBitmap; Width, Height :integer) :TBgraBitmap;
var
  f :single;
begin
  if (Width=0) and (Height=0) then begin
    Width := Src.Width;
    Height := Src.Height;
  end else begin
    f := Src.Width/Src.Height;
    if Width=0 then
      Width := round(Height*f)
    else if Height=0 then
      Height := round(Width/f);
  end;
  Src.ResampleFilter := rfLanczos2;
  result := Src.Resample(Width, Height) as TBGRABitmap;
end;
 


Besten Dank
www.atomek.de

sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: Image Resize

Beitrag von sstvmaster »

Bitte sehr. :)

Ich bin ja erstaunt das ich als blutiger Pascal Anfänger einem "alten Hasen" helfen konnte.

LG Maik
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

Antworten