Image Resize

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...

Image Resize

Beitragvon Atomek » 5. Mär 2018, 19:56 Image Resize

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
Atomek
 
Beiträge: 6
Registriert: 15. Jun 2010, 11:07

Beitragvon sstvmaster » 5. Mär 2018, 20:38 Re: Image Resize

Hi,

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

LG Maik
OS: Windows 7 32/64bit
Lazarus 1.8.2, 32bit
Lazarus 1.9.0 Trunk, 32bit
sstvmaster
 
Beiträge: 38
Registriert: 22. Okt 2016, 22:12
OS, Lazarus, FPC: Lazarus 1.8.2 + 1.9.0 Trunk / Win32, Windows 7 32+64bit | 
CPU-Target: 32Bit
Nach oben

Beitragvon LazProgger » 5. Mär 2018, 21:01 Re: Image Resize

Hast du dir das Projekt einmal angeschaut:

http://imaginglib.sourceforge.net
LazProgger
 
Beiträge: 63
Registriert: 11. Mär 2014, 00:33

Beitragvon Atomek » 6. Mär 2018, 20:50 Re: Image Resize

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
Atomek
 
Beiträge: 6
Registriert: 15. Jun 2010, 11:07

Beitragvon sstvmaster » 6. Mär 2018, 20:55 Re: Image Resize

Bitte sehr. :)

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

LG Maik
OS: Windows 7 32/64bit
Lazarus 1.8.2, 32bit
Lazarus 1.9.0 Trunk, 32bit
sstvmaster
 
Beiträge: 38
Registriert: 22. Okt 2016, 22:12
OS, Lazarus, FPC: Lazarus 1.8.2 + 1.9.0 Trunk / Win32, Windows 7 32+64bit | 
CPU-Target: 32Bit
Nach oben

• Themenende •

Zurück zu Multimedia



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

porpoises-institution
accuracy-worried