22. april 2003 - 16:55Der er
11 kommentarer og 1 løsning
Resize JPEG
Hej Eksperter.
Jeg skal bruge et stykke kode som under runtime loader et jpeg/jpg billede, resizer den, og til sidst gemmer det resizede billede et andet sted på harddisken.
Uden nogen betydelig bekostning af kvalitet.
Jeg har søgt lidt rundt her på Eksperten og andre steder, kan dog ikke lige finde noget som virker med jpeg billeder.
Det loader billeder, men tager kun et lille udklip af billedet (fra øverste venstre hjørne, i størrelsen 800*600), det resizer ikke.. kigger videre på det..
procedure CreateThumbnail(InStream, OutStream: TStream; Width, Height: Integer; Compress: Boolean; ProgressEvent : TProgressEvent); overload; var JpegImage: TJpegImage; Bitmap: TBitmap; Ratio: Double; ARect: TRect; AHeight (*, AHeightOffset*): Integer; AWidth (*, AWidthOffset*): Integer; begin // Check for invalid parameters JpegImage := TJpegImage.Create; try // Load the image JpegImage.LoadFromStream(InStream); if Width = 0 then Width := JpegImage.Width; if Height = 0 then Height := JpegImage.Height;
// Create bitmap, and calculate parameters Bitmap := TBitmap.Create; try Ratio := JpegImage.Width / JpegImage.Height; if Ratio > 1 then begin AHeight := Round(Width / Ratio); // AHeightOffset:=(Height-AHeight) div 2; AWidth := Width; // AWidthOffset:=0; end else begin AWidth := Round(Height * Ratio); // AWidthOffset:=(Width-AWidth) div 2; AHeight := Height; // AHeightOffset:=0; end;
Bitmap.Width := AWidth; Bitmap.Height := AHeight; // Bitmap.Canvas.Brush.Color:=FillColor; // Bitmap.Canvas.FillRect(Rect(0,0,Width,Height)); // StretchDraw original image // ARect:=Rect(AWidthOffset,AHeightOffset,AWidth+AWidthOffset,AHeight+AHeightOffset); ARect := Rect(0, 0, AWidth, AHeight); Bitmap.Canvas.StretchDraw(ARect, JpegImage); // Assign back to the Jpeg, and save to the file JpegImage.Free;
Tak for opmærksomheden borrisholt, men var allerede selv kommet til at tænke på det, så jeg havde allerede lavet skalerings mulighed.
Har ikke prøvet dit kode, da mit eget ellers virker udemærket, tog mig da også til hovedet da jeg så det første billede som ikke var i forholdet 4:3 ;)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.