Alien-FreeImage
view release on metacpan or search on metacpan
src/Source/LibJPEG/transupp.c view on Meta::CPAN
[comp_height - y_crop_blocks - dst_blk_y - offset_y - 1];
for (i = 0; i < DCTSIZE; i++) {
for (j = 0; j < DCTSIZE; j++) {
dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j];
j++;
dst_ptr[j*DCTSIZE+i] = -src_ptr[i*DCTSIZE+j];
}
}
}
} else {
if (x_crop_blocks + dst_blk_x < comp_width) {
/* Bottom-edge blocks are mirrored in x only */
src_ptr = src_buffer[compptr->h_samp_factor - offset_x - 1]
[dst_blk_y + offset_y + y_crop_blocks];
for (i = 0; i < DCTSIZE; i++) {
for (j = 0; j < DCTSIZE; j++)
dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j];
i++;
for (j = 0; j < DCTSIZE; j++)
dst_ptr[j*DCTSIZE+i] = -src_ptr[i*DCTSIZE+j];
}
} else {
/* At lower right corner, just transpose, no mirroring */
src_ptr = src_buffer[offset_x]
[dst_blk_y + offset_y + y_crop_blocks];
for (i = 0; i < DCTSIZE; i++)
for (j = 0; j < DCTSIZE; j++)
dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j];
}
}
}
}
}
}
}
}
/* Parse an unsigned integer: subroutine for jtransform_parse_crop_spec.
* Returns TRUE if valid integer found, FALSE if not.
* *strptr is advanced over the digit string, and *result is set to its value.
*/
LOCAL(boolean)
jt_read_integer (const char ** strptr, JDIMENSION * result)
{
const char * ptr = *strptr;
JDIMENSION val = 0;
for (; isdigit(*ptr); ptr++) {
val = val * 10 + (JDIMENSION) (*ptr - '0');
}
*result = val;
if (ptr == *strptr)
return FALSE; /* oops, no digits */
*strptr = ptr;
return TRUE;
}
/* Parse a crop specification (written in X11 geometry style).
* The routine returns TRUE if the spec string is valid, FALSE if not.
*
* The crop spec string should have the format
* <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
* while specifying yoffset, since they look alike.)
*
* This code is loosely based on XParseGeometry from the X11 distribution.
*/
GLOBAL(boolean)
jtransform_parse_crop_spec (jpeg_transform_info *info, const char *spec)
{
info->crop = FALSE;
info->crop_width_set = JCROP_UNSET;
info->crop_height_set = JCROP_UNSET;
info->crop_xoffset_set = JCROP_UNSET;
info->crop_yoffset_set = JCROP_UNSET;
if (isdigit(*spec)) {
/* fetch width */
if (! jt_read_integer(&spec, &info->crop_width))
return FALSE;
if (*spec == 'f' || *spec == 'F') {
spec++;
info->crop_width_set = JCROP_FORCE;
} else
info->crop_width_set = JCROP_POS;
}
if (*spec == 'x' || *spec == 'X') {
/* fetch height */
spec++;
if (! jt_read_integer(&spec, &info->crop_height))
return FALSE;
if (*spec == 'f' || *spec == 'F') {
spec++;
info->crop_height_set = JCROP_FORCE;
} else
info->crop_height_set = JCROP_POS;
}
if (*spec == '+' || *spec == '-') {
/* fetch xoffset */
info->crop_xoffset_set = (*spec == '-') ? JCROP_NEG : JCROP_POS;
spec++;
if (! jt_read_integer(&spec, &info->crop_xoffset))
return FALSE;
}
if (*spec == '+' || *spec == '-') {
/* fetch yoffset */
info->crop_yoffset_set = (*spec == '-') ? JCROP_NEG : JCROP_POS;
spec++;
if (! jt_read_integer(&spec, &info->crop_yoffset))
return FALSE;
}
/* We had better have gotten to the end of the string. */
if (*spec != '\0')
return FALSE;
info->crop = TRUE;
return TRUE;
}
/* Trim off any partial iMCUs on the indicated destination edge */
LOCAL(void)
( run in 2.404 seconds using v1.01-cache-2.11-cpan-140bd7fdf52 )