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:
Operación | Descripción |
---|---|
FIJPEG_OP_NONE | No transformar (no se hace nada). |
FIJPEG_OP_FLIP_H | Volteo horizontal. |
FIJPEG_OP_FLIP_V | Volteo vertical. |
FIJPEG_OP_TRANSPOSE | Transponer a través del eje superior izquierdo al inferior derecho. |
FIJPEG_OP_TRANSVERSE | Transponer desde el eje superior derecho al inferior izquierdo. |
FIJPEG_OP_ROTATE_90 | Rotación de 90 grados en sentido horario. |
FIJPEG_OP_ROTATE_180 | Rotación de 180 grados. |
FIJPEG_OP_ROTATE_270 | Rotació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.