Grafiken proportional skalieren
Mit dieser Prozedur können Sie Grafiken proportional verkleinern/vergrößern.
procedure StretchGraphic(const src, dest: TGraphic; DestWidth, DestHeight: integer; Smooth: Boolean = true); var temp, aCopy: TBitmap; faktor: double; begin Assert(Assigned(src) and Assigned(dest)); if (src.Width = 0) or (src.Height = 0) then raise Exception.CreateFmt('Invalid source dimensions: %d x %d',[src.Width, src.Height]); if src.Width > DestWidth then begin faktor := DestWidth / src.Width; if (src.Height * faktor) > DestHeight then faktor := DestHeight / src.Height; end else begin faktor := DestHeight / src.Height; if (src.Width * faktor) > DestWidth then faktor := DestWidth / src.Width; end; try aCopy := TBitmap.Create; try aCopy.PixelFormat := pf24Bit; aCopy.Assign(src); temp := TBitmap.Create; try temp.Width := round(src.Width * faktor); temp.Height := round(src.Height * faktor); if Smooth then SetStretchBltMode(temp.Canvas.Handle, HALFTONE); StretchBlt(temp.Canvas.Handle, 0, 0, temp.Width, temp.Height, aCopy.Canvas.Handle, 0, 0, aCopy.Width, aCopy.Height, SRCCOPY); dest.Assign(temp); finally temp.Free; end; finally aCopy.Free; end; except on E: Exception do MessageBox(0, PChar(E.Message), nil, MB_OK or MB_ICONERROR); end; end;Parameter:
- src: die Quellgrafik vom Typ TGraphic
- dest: die Zielgrafik vom selben Typ
- DestWidth: maximal erlaubte Breite der Zielgrafik
- DestHeight: maximal erlaubte Höhe der Zielgrafik
- Smooth: berechnete Farben verwenden
Auswirkungen von Smooth
Falls Sie sich unter den berechneten Farben nichts vorstellen können, hier eine Gegenüberstellung, links Smooth ein, rechts aus (die Quellgrafik in der Größe 1632x1224 war natürlich in beiden Fällen exakt dieselbe):
