I think, your creation would benefit from supporting the lanczos filter for resizing.
Imaging already supports Lanczos and other filters. It is only that ResizeImage function uses
only nearest, bilinear, and bicubic filtering to make low level interface functions in Imaging.pas unit simpler.

If you want to try other filters look at StretchResample functions in ImagingFormats.pas unit. You can even design your own filter and pass it to overloaded StretchResample.
[pascal]type
TSamplingFilter = (sfNearest, sfLinear, sfCosine, sfHermite, sfQuadratic,
sfGaussian, sfSpline, sfLanczos, sfMitchell, sfCatmullRom);

procedure StretchResample(const SrcImage: TImageData; SrcX, SrcY, SrcWidth,
SrcHeight: LongInt; var DstImage: TImageData; DstX, DstY, DstWidth,
DstHeight: LongInt; Filter: TSamplingFilter; WrapEdges: Boolean = False); overload;
procedure StretchResample(const SrcImage: TImageData; SrcX, SrcY, SrcWidth,
SrcHeight: LongInt; var DstImage: TImageData; DstX, DstY, DstWidth,
DstHeight: LongInt; Filter: TFilterFunction; Radius: Single;
WrapEdges: Boolean = False); overload;
[/pascal]