Si lo que deseas es bajar el tamaño de la imagen en pixels puedes usar Stretch de TImage o con la API
StretchBlt de GDI pero el resultado es mejor usando GDIplus. En
este hilo explico como hacerlo con GDIplus Flat con dos funciones básicas:
Código Delphi
[-]procedure DrawImageRect(DC: HDC; Bitmap: HBITMAP; X, Y, W, H: integer);
var
Graphics: Pointer;
GBitmap: THANDLE;
begin
GdipCreateBitmapFromHBITMAP(Bitmap, 0, GBitmap);
GdipCreateFromHDC(DC, Graphics);
GdipDrawImageRect(Graphics, GBitmap, X, Y, W, H);
GdipDisposeImage(GBitmap);
GdipDeleteGraphics(Graphics);
end;
Código Delphi
[-]
function CreateResizeBitmap(Bitmap: HBITMAP; H, W: integer): HBITMAP;
var
Graphics: Pointer;
GBitmap: THANDLE;
DC, dcMem: HDC;
bmOld: HBITMAP;
begin
DC:= GetDC(0);
Result:= CreateCompatibleBitmap(DC, W, H);
dcMem:= CreateCompatibleDC(DC);
bmOld:= SelectObject(dcMem, Result);
GdipCreateFromHDC(dcMem, Graphics);
GdipCreateBitmapFromHBITMAP(Bitmap, 0, GBitmap);
GdipDrawImageRect(Graphics, GBitmap, 0, 0, H, W);
GdipDisposeImage(GBitmap);
GdipDeleteGraphics(Graphics);
SelectObject(dcMem, bmOld);
DeleteDC(dcMem);
ReleaseDC(0, DC);
end;
El tema del formato final en el que se guarde la imagen es otro asunto que también se puede hacer con GDIplus.
Saludos.