freeimage.h

FreeImage_RescaleRect

1 4 8 16 24 32 16UINT16 48RGB16 64RGBA16 32FLOAT 96RGBF 128RGBAF

DLL_API FIBITMAP *DLL_CALLCONV FreeImage_RescaleRect(FIBITMAP *dib, int dst_width, int
dst_height, int left, int top, int right, int bottom, FREE_IMAGE_FILTER filter
FI_DEFAULT(FILTER_CATMULLROM), unsigned flags FI_DEFAULT(0));

FreeImage_RescaleRect proporciona soporte para reescalar sólo un área rectangular de una imagen.

Basicamente, es una solución mucho más rápida que codificar:

FIBITMAP *dibTmp = FreeImage_Copy(dib, 10, 10, 140, 140);
FIBITMAP *dibDst = FreeImage_Rescale(dibTmp, 260, 260);
FreeImage_Unload(dibTmp);

Mucho más rápido y sencillo es escribir esto:

FIBITMAP *dibDst = FreeImage_RescaleRect(dib, 260, 260, 10, 10, 140, 140);

Por supuesto, la función no tiene relación con FreeImage_Copy, pero lee y reescala sólo los bits dentro del rectángulo especifido.

Adicionalmente, la función FreeImage_RescaleRect tiene un parámetro flags. Actualmente existen tres flags/opciones definidas e implementadas:

Flag RescaleRectDescripción
FI_RESCALE_DEFAULTOpción por defecto; no se aplica ninguna de las otras opciones.
FI_RESCALE_TRUE_COLORPara imágenes no transparentes, convierte a 24-bit si la profundidad de bits de src es menor o igual a 8 (por defecto es una imagen en escala de grises de 8-bit).
FI_RESCALE_OMIT_METADATANo copia los metadatos a la imagen reescalada.

Sobre la opción FI_RESCALE_TRUE_COLOR:

Mediante el uso del flag FI_RESCALE_TRUE_COLOR, se puede asegurar que no se obtendrá una imagen con paleta de 8-bit sino una imagen en color verdadero como resultado (24- o 32-bit, dependiendo de la transparencia), cuando se reescala una imagen con una profundidad de bits menor o igual a 8 (src bpp <= 8), consistirá sólo de colores grises (r=g=b). Por defecto, FreeImage_Rescale retorna una imagen con la profundidad de bits más pequeña posible (lo cual es una imagen en escala de grises de 8-bit). Sin embargo, puede resultar molesto obtener una imagen en color verdadero o una imagen con paleta para una imagen de origen con paleta, en función sólo de la coincidencia de color de la imagen de origen sólo (especialmente si la imagen reescalada necesita mayor procesamiento).