/*
* transupp.c
*
- * Copyright (C) 1997-2009, Thomas G. Lane, Guido Vollbeding.
+ * This file was part of the Independent JPEG Group's software:
+ * Copyright (C) 1997-2011, Thomas G. Lane, Guido Vollbeding.
+ * libjpeg-turbo Modifications:
* Copyright (C) 2010, D. R. Commander.
- * This file is part of the Independent JPEG Group's software.
* For conditions of distribution and use, see the accompanying README file.
*
* This file contains image transformation routines and other utility code
* The routine returns TRUE if the spec string is valid, FALSE if not.
*
* The crop spec string should have the format
- * <width>x<height>{+-}<xoffset>{+-}<yoffset>
+ * <width>[f]x<height>[f]{+-}<xoffset>{+-}<yoffset>
* where width, height, xoffset, and yoffset are unsigned integers.
* Each of the elements can be omitted to indicate a default value.
* (A weakness of this style is that it is not possible to omit xoffset
/* fetch width */
if (! jt_read_integer(&spec, &info->crop_width))
return FALSE;
- info->crop_width_set = JCROP_POS;
+ if (*spec == 'f' || *spec == 'F') {
+ spec++;
+ info->crop_width_set = JCROP_FORCE;
+ } else
+ info->crop_width_set = JCROP_POS;
}
- if (*spec == 'x' || *spec == 'X') {
+ if (*spec == 'x' || *spec == 'X') {
/* fetch height */
spec++;
if (! jt_read_integer(&spec, &info->crop_height))
return FALSE;
- info->crop_height_set = JCROP_POS;
+ if (*spec == 'f' || *spec == 'F') {
+ spec++;
+ info->crop_height_set = JCROP_FORCE;
+ } else
+ info->crop_height_set = JCROP_POS;
}
if (*spec == '+' || *spec == '-') {
/* fetch xoffset */
else
yoffset = info->crop_yoffset;
/* Now adjust so that upper left corner falls at an iMCU boundary */
- info->output_width =
- info->crop_width + (xoffset % info->iMCU_sample_width);
- info->output_height =
- info->crop_height + (yoffset % info->iMCU_sample_height);
+ if (info->crop_width_set == JCROP_FORCE)
+ info->output_width = info->crop_width;
+ else
+ info->output_width =
+ info->crop_width + (xoffset % info->iMCU_sample_width);
+ if (info->crop_height_set == JCROP_FORCE)
+ info->output_height = info->crop_height;
+ else
+ info->output_height =
+ info->crop_height + (yoffset % info->iMCU_sample_height);
/* Save x/y offsets measured in iMCUs */
info->x_crop_offset = xoffset / info->iMCU_sample_width;
info->y_crop_offset = yoffset / info->iMCU_sample_height;
* We try to adjust the Tags ExifImageWidth and ExifImageHeight if possible.
*/
+#if JPEG_LIB_VERSION >= 70
LOCAL(void)
adjust_exif_parameters (JOCTET FAR * data, unsigned int length,
JDIMENSION new_width, JDIMENSION new_height)
offset += 12;
} while (--number_of_tags);
}
+#endif
/* Adjust output image parameters as needed.