215 return (
PIX *)(
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
217 return (
PIX *)(
PIX *)ERROR_PTR(
"invalid incolor value", __func__, NULL);
219 if (L_ABS(angle) > MaxShearAngle) {
220 L_ERROR(
"%6.2f radians; too large for shear rotation\n", __func__,
224 if (L_ABS(angle) < MinAngleToRotate)
225 return pixClone(pixs);
227 if (L_ABS(angle) <= MaxTwoShearAngle)
266PIX *pix1, *pix2, *pixd;
269 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
271 return (
PIX *)(
PIX *)ERROR_PTR(
"invalid incolor value", __func__, NULL);
273 if (L_ABS(angle) > MaxShearAngle) {
274 L_ERROR(
"%6.2f radians; too large for shear rotation\n", __func__,
278 if (L_ABS(angle) < MinAngleToRotate)
279 return pixClone(pixs);
280 if (L_ABS(angle) > MaxTwoShearAngle)
281 L_WARNING(
"%6.2f radians; large angle for 2-shear rotation\n",
282 __func__, L_ABS(angle));
284 if ((pix1 = pixHShear(NULL, pixs, ycen, angle, incolor)) == NULL)
285 return (
PIX *)ERROR_PTR(
"pix1 not made", __func__, NULL);
286 pixd = pixVShear(NULL, pix1, xcen, angle, incolor);
289 return (
PIX *)ERROR_PTR(
"pixd not made", __func__, NULL);
291 if (pixGetDepth(pixs) == 32 && pixGetSpp(pixs) == 4) {
342PIX *pix1, *pix2, *pixd;
345 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
347 return (
PIX *)(
PIX *)ERROR_PTR(
"invalid incolor value", __func__, NULL);
349 if (L_ABS(angle) > MaxShearAngle) {
350 L_ERROR(
"%6.2f radians; too large for shear rotation\n", __func__,
354 if (L_ABS(angle) < MinAngleToRotate)
355 return pixClone(pixs);
356 if (L_ABS(angle) > MaxThreeShearAngle) {
357 L_WARNING(
"%6.2f radians; large angle for 3-shear rotation\n",
358 __func__, L_ABS(angle));
361 hangle = atan(sin(angle));
362 if ((pixd = pixVShear(NULL, pixs, xcen, angle / 2.f, incolor)) == NULL)
363 return (
PIX *)ERROR_PTR(
"pixd not made", __func__, NULL);
364 if ((pix1 = pixHShear(NULL, pixd, ycen, hangle, incolor)) == NULL) {
366 return (
PIX *)ERROR_PTR(
"pix1 not made", __func__, NULL);
368 pixVShear(pixd, pix1, xcen, angle / 2.f, incolor);
371 if (pixGetDepth(pixs) == 32 && pixGetSpp(pixs) == 4) {
423 return ERROR_INT(
"pixs not defined", __func__, 1);
425 return ERROR_INT(
"invalid value for incolor", __func__, 1);
426 if (pixGetColormap(pixs) != NULL)
427 return ERROR_INT(
"pixs is colormapped", __func__, 1);
431 if (L_ABS(angle) > MaxThreeShearAngle) {
432 L_WARNING(
"%6.2f radians; large angle for in-place 3-shear rotation\n",
433 __func__, L_ABS(angle));
436 hangle = atan(sin(angle));
437 pixHShearIP(pixs, ycen, angle / 2.f, incolor);
438 pixVShearIP(pixs, xcen, hangle, incolor);
439 pixHShearIP(pixs, ycen, angle / 2.f, incolor);