freeimage.h

FreeImage_JPEGTransform

DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransform(const char *src_file, const char
*dst_file, FREE_IMAGE_JPEG_OPERATION operation, BOOL perfect FI_DEFAULT(TRUE));

Realiza una rotación o volteo sin pérdida de un fichero JPEG. A la entrada, src_file es el fichero JPEG de origen y dst_fil el fichero JPEG de destino. Está permitido usar el mismo fichero de origen y destino: el fichero de origen será trasformado y sobrescrito. El parámetro operation especifica el tipo de trasnformación a aplicar. Son posibles las siguientes transformaciones:

Tabla 16: Constantes FREE_IMAGE_JPEG_OPERATION.

OperaciónDescripción
FIJPEG_OP_NONENo transformar (no se hace nada).
FIJPEG_OP_FLIP_HVolteo horizontal.
FIJPEG_OP_FLIP_VVolteo vertical.
FIJPEG_OP_TRANSPOSETransponer a través del eje superior izquierdo al inferior derecho.
FIJPEG_OP_TRANSVERSETransponer desde el eje superior derecho al inferior izquierdo.
FIJPEG_OP_ROTATE_90Rotación de 90 grados en sentido horario.
FIJPEG_OP_ROTATE_180Rotación de 180 grados.
FIJPEG_OP_ROTATE_270Rotación de 270 grados en sentido horario (o 90 grados en sentido antihorario).

FreeImage_JPEGTransform funciona reorganizando los datos comprimidos (coeficientes DCT), sin decodificar nunca la imagen por completo. De este modo, sus transformaciones son sin pérdida: no hay ningún tipo de degradación, esto puede no ser cierto si se usa FreeImage_Load seguido de FreeImage_Save para realizar la misma conversión.

La transformación FIJPEG_OP_TRANSPOSE no tiene restricciones independientemente de las dimensiones de la imagen. Las otras trasnformaciones funcionan de un modo bastante extraño si las dimensiones de la imagen no son multiplo del tamaño iMCU (generalmente 8 o 16 pixels), porque sólo pueden trasnformar bloques completos de datos de coeficiente DCT en el modo deseado.

El comportamiento por defecto de la función cuando se transforma una imagen de tamaño impar es descartar cualquier pixel del borde no transformable, en lugar de obtener una franja de pixels de aspecto raro a lo largo del borde derecho y/o inferior de la imagen transformada. Obviemente, cuando se aplica a imágenes impares, la transformación no es reversible, así que estrictamente hablando, la operación no es sin pérdida.

Para evitar una trasnformación con pérdida, se puede usar el parámetro perfect con valor TRUE. Cuando se usa este parámetro, cualquier transformación no reversible es evitada, se genera un mensaje de error (que se puede consultar usando FreeImage_SetOutputMessage) y la función retorna FALSE.