FreeImage_JPEGTransformCombined
DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransformCombined(const char *src_file, const char *dst_file, FREE_IMAGE_JPEG_OPERATION operation, int* left, int* top, int* right, int* bottom, BOOL perfect FI_DEFAULT(TRUE));
Realiza una combinación de de rotación o volteo y recorte sin pérdida en un fichero JPEG. A la entrada, src_file es el fichero JPEG de origen y dst_file el de destino. Es posible usar el mismo fichero de origen y destino: el fichero de origen será transformado y sobrescrito.
El parámetro operation especifica el tipo de transformación a aplicar (ver Tabla 16). Cualquier transformación no reversible puede ser evitada usando el parámetro perfect. El rectángulo de recorte viene definido por los parámetros (left, top, right, bottom) (ver FreeImage_JPEGCrop).
La función trabaja realizando primero la transformación usando el parámetro operation, después se ajusta el rectángulo de recorte, es decir, los parámetros left, top, right y bottom, al tamaño iMCU y a la anchura y altura de destino, y finalmente recortando la imagen transformada.
Se puede usar el valor FIJPEG_OP_NONE para el parámetro operation si no se necesita hacer ninguna transformación, y se puede especificar cero para los parámetros (left, top, right, bottom) si no se necesita una operación de recorte.
Se puede simular el efecto de una operación combinada de trasnformación y recorte usando el valor NULL para el parámetro dst_file.
void testJPEGTransformation() { BOOL bResult; // assume source has a width x height = 600x400 and a iMCU size = 16 const char *src_file = "input_test.jpg"; const char *dst_file = "output_test.jpg"; // cropped rectangle int left, top, right, bottom; // we require a perfect transformation BOOL perfect = TRUE; left = 50; top = 100; right = 650; bottom = 500; // (optional) simulate the transform and get the new rectangle coordinates // (adjusted to the iMCU size and to the dst image width & height) bResult = FreeImage_JPEGTransformCombined(src_file, NULL, FIJPEG_OP_ROTATE_90, &left, &top, &right, &bottom, perfect); assert(bResult == TRUE); // check the cropped rectangle, adjusted for a WxH = 400x600 after rotation assert( (left == 48) && (right == 400) && (top == 96) && (bottom == 500) ); // then apply the transform bResult = FreeImage_JPEGTransformCombined(src_file, dst_file, FIJPEG_OP_ROTATE_90, &left, &top, &right, &bottom, perfect); assert(bResult == TRUE); }