Ja.. det virker godt. Men jeg har faktisk brug for at skalere ned til en givet størrelse, fx 120x160px. Min fejl, spørgsmålet var ikke formuleret ordentligt...
Den enkle er stretchDraw, men giver ofte et kornet resultat. Dest.Canvas.StretchDraw(Rect(0,0,Dest.Width,Dest.Height),Src);
En anden måder er at bruge denne procedure : SmoothResize.
I begge tilfælde skal man bruge to TBitmap: Scr og Dest. Src er det oprindelige bitmap. Dest er det scalerede (resizede) bitmap. Man angiver selv størrelsen af dest før proceduren kaldes. F.eks.
Dest.Height := 300; Dest.Width := 400;
procedure SmoothResize(src, dest: tBitmap); type PRGB24 = ^TRGB24; TRGB24 = packed record B: Byte; G: Byte; R: Byte; end; var x, y, ix, iy: integer; x1, x2, x3: integer;
if src.PixelFormat <> pf24bit then src.PixelFormat := pf24bit; if dest.PixelFormat <> pf24bit then dest.PixelFormat := pf24bit; w := Dest.Width; h := Dest.Height;
if (src.Width <= dest.Width) and (src.Height <= dest.Height) then begin
dest.Assign(src);
exit; end;
iDst := (w * 24 + 31) and not 31; iDst := iDst div 8; //BytesPerScanline iSrc := (Src.Width * 24 + 31) and not 31; iSrc := iSrc div 8; try xscale := 1 / (w / src.Width); yscale := 1 / (h / src.Height); except on exception do end; // X lookup table SetLength(lutX, w); x1 := 0; x2 := trunc(xscale); for x := 0 to w - 1 do begin lutX[x] := x2 - x1; x1 := x2; x2 := trunc((x + 2) * xscale); end;
// Y lookup table SetLength(lutY, h); x1 := 0; x2 := trunc(yscale); for x := 0 to h - 1 do begin lutY[x] := x2 - x1; x1 := x2; x2 := trunc((x + 2) * yscale); end;
r := (c1.R + c2.R + (c3.R * -12) + c4.R + c5.R) div -8; g := (c1.G + c2.G + (c3.G * -12) + c4.G + c5.G) div -8; b := (c1.B + c2.B + (c3.B * -12) + c4.B + c5.B) div -8;
if r < 0 then r := 0 else if r > 255 then r := 255; if g < 0 then g := 0 else if g > 255 then g := 255; if b < 0 then b := 0 else if b > 255 then b := 255;
Jeg valgte at afvise dit svar eht, idet det ikke virker iflg. kommentaren: iRatio := 65535 div (dx * dy); /// her opstår en fejl: division by zero ????????????????
Det er OK at du afviser mit svar, men du skulle nu alligevel kigge lidt nærmere på proceduren. Den tegner fine og skarpe thumbnails.
Jeg bruger proceduren som den står i et af mine programmer, uden at der opstår fejl. Kommentaren jeg skrev vistnok engang, mens jeg tilrettede koden. Den burde være slettet.
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.