Method: Magick::Image#tint
- Defined in:
- ext/RMagick/rmimage.cpp
#tint(tint, red_alpha, green_alpha = red_alpha, blue_alpha = red_alpha, alpha_alpha = 1.0) ⇒ Object
Applies a color vector to each pixel in the image.
-
Alpha values are percentages: 0.10 -> 10%.
14434 14435 14436 14437 14438 14439 14440 14441 14442 14443 14444 14445 14446 14447 14448 14449 14450 14451 14452 14453 14454 14455 14456 14457 14458 14459 14460 14461 14462 14463 14464 14465 14466 14467 14468 14469 14470 14471 14472 14473 14474 14475 14476 14477 14478 14479 14480 14481 14482 14483 14484 14485 14486 14487 14488 14489 14490 14491 14492 14493 14494 14495 14496 |
# File 'ext/RMagick/rmimage.cpp', line 14434
VALUE
Image_tint(int argc, VALUE *argv, VALUE self)
{
Image *image, *new_image;
PixelColor tint;
double red_pct_opaque, green_pct_opaque, blue_pct_opaque;
double alpha_pct_opaque = 1.0;
char alpha[50];
ExceptionInfo *exception;
image = rm_check_destroyed(self);
switch (argc)
{
case 2:
red_pct_opaque = NUM2DBL(argv[1]);
green_pct_opaque = blue_pct_opaque = red_pct_opaque;
break;
case 3:
red_pct_opaque = NUM2DBL(argv[1]);
green_pct_opaque = NUM2DBL(argv[2]);
blue_pct_opaque = red_pct_opaque;
break;
case 4:
red_pct_opaque = NUM2DBL(argv[1]);
green_pct_opaque = NUM2DBL(argv[2]);
blue_pct_opaque = NUM2DBL(argv[3]);
break;
case 5:
red_pct_opaque = NUM2DBL(argv[1]);
green_pct_opaque = NUM2DBL(argv[2]);
blue_pct_opaque = NUM2DBL(argv[3]);
alpha_pct_opaque = NUM2DBL(argv[4]);
break;
default:
rb_raise(rb_eArgError, "wrong number of arguments (%d for 2 to 5)", argc);
break;
}
if (red_pct_opaque < 0.0 || green_pct_opaque < 0.0
|| blue_pct_opaque < 0.0 || alpha_pct_opaque < 0.0)
{
rb_raise(rb_eArgError, "alpha percentages must be non-negative.");
}
snprintf(alpha, sizeof(alpha),
"%g,%g,%g,%g", red_pct_opaque*100.0, green_pct_opaque*100.0,
blue_pct_opaque*100.0, alpha_pct_opaque*100.0);
Color_to_PixelColor(&tint, argv[0]);
exception = AcquireExceptionInfo();
#if defined(IMAGEMAGICK_7)
GVL_STRUCT_TYPE(TintImage) args = { image, alpha, &tint, exception };
#else
GVL_STRUCT_TYPE(TintImage) args = { image, alpha, tint, exception };
#endif
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(TintImage), &args);
rm_check_exception(exception, new_image, DestroyOnError);
DestroyExceptionInfo(exception);
return rm_image_new(new_image);
}
|