![]() |
image resizen??
hey DPler,
weiß einer von euch wie ich bilder (jpg) verändern kann, sprich die breite und die höhe, der inhalt sollte aber nicht verloren gehen sondern "gestretched" werden!! weiß einer rat?? das ganze sollte ich aber auch abspeichern können also nicht bloß auf der form.. ich hab auch schon gesucht, aber für mich leider nichts verwertbares gefunden, war alles in php oder java!! |
Re: image resizen??
entweedr komponente stretchen und resizen oder DP suche nutzen. Gibt einige Möglichkeiten! ;)
nachdem du es veraendert hast: Zitat:
|
Re: image resizen??
Hier hab ich grad nen passendes Stück Code zur Hand, es wird mit Kantenglättung aus der Graphics32 Bibliothek gearbeitet.
LongSideLength gibt die Sollgröße der längeren Bildseite an (damit nichts verzerrt wird). Das lässt sich aber auc auf beliebige Seitenlängen anpassen...
Delphi-Quellcode:
mfg phreax
uses Jpeg, Gr32, GR32_Resamplers, FileCtrl;
procedure ScaleImages(SrcFile,DstFile: String; LongSideLength: integer); var R: TKernelResampler; tbmpDest : TBitmap32; tbmpSource: TBitmap32; NewWidth,NewHeight: integer; TempWinBmp: TBitmap; JpgImage: TJPEGImage; begin tbmpSource := TBitmap32.Create; try tbmpSource.LoadFromFile(SrcFile); R := TKernelResampler.Create(tbmpSource); //<-einen Resampler fürs verkleinern benutzen R.Kernel := TCosineKernel.Create; tbmpDest := TBitmap32.Create; try if tbmpSource.Width > tbmpSource.Height then begin NewWidth := LongSideLength; NewHeight := round(tbmpSource.Height*NewWidth / tbmpSource.Width); end else begin NewHeight := LongSideLength; NewWidth := round(tbmpSource.Width*NewHeight / tbmpSource.Height); end; tbmpDest.SetSize(NewWidth, NewHeight); tbmpDest.Draw(tbmpDest.BoundsRect, tbmpSource.BoundsRect, tbmpSource); JpgImage :=TJPEGImage.Create; TempWinBmp := TBitmap.Create; try TempWinBmp.Assign(tbmpDest); JpgImage.CompressionQuality := 100; //Qualitätseinstellung... JpgImage.Assign(TempWinBmp); JpgImage.SaveToFile(DstFile); finally TempWinBmp.Free; JpgImage.Free; end; finally //Aufräumen :) tbmpDest.Free; end; finally tbmpSource.Free; end; end |
Re: image resizen??
Hi,
so würde es wohl auch gehen, die Qualität wird durch das Vergrößern allerdings auch nicht besser.
Delphi-Quellcode:
uses JPEG;
function StretchJpeg(Open, Save: AnsiString; Img: Timage): Boolean; var Jpg : TJpegImage; Bmp: TBitmap; begin Result:= false; if FileExists(Open) then begin Jpg := TJpegImage.Create; Bmp:= TBitmap.Create; try Jpg.LoadFromFile(Open); Bmp.PixelFormat:= pf24bit; Bmp.Assign(Jpg); Img.Picture.Bitmap.Width:= Img.Width; Img.Picture.Bitmap.Height:= Img.Height; SetStretchBltMode(Img.Picture.Bitmap.Canvas.Handle, STRETCH_HALFTONE); SetBrushOrgEx(Img.Picture.Bitmap.Canvas.Handle, 0, 0, nil); StretchBlt(Img.Picture.Bitmap.Canvas.Handle, 0, 0, Img.Width, Img.Height, Bmp.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, srccopy); Jpg.Assign(Img.Picture.Bitmap); Jpg.CompressionQuality:= 95; Jpg.Compress; Jpg.SaveToFile(Save); Result:= true; finally Bmp.Free; Jpg.Free; end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin StretchJpeg('c:\Bild.jpg', 'C:\BildTest.jpg', Image1); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz