alphaMaskGrob() masks a grob using another grob to specify the (alpha) mask.
Grob to be masked
Grob that defines masking region
If TRUE use the grid mask feature introduced in R v4.1.0.
If FALSE do a rasterGrob approximation.
If NULL try to guess an appropriate choice.
Note not all graphic devices support the grid mask feature.
“png” graphics device to save intermediate raster data with if use_R4.1_masks is FALSE.
If NULL and suggested package ragg is available
and versions are high enough we directly capture masked raster via ragg::agg_capture().
Otherwise we will use png_device
(default ragg::agg_png() if available else grDevices::png()) and png::readPNG()
to manually compute a masked raster.
Resolution of desired rasterGrob in pixels per inch if use_R4.1_masks is FALSE.
A character identifier.
An object of class "gpar", typically the output
from a call to the function gpar. This is basically
a list of graphical parameter settings.
A Grid viewport object (or NULL).
A grid grob
# May take more than 5 seconds on CRAN servers
if (capabilities("png") && require("grid")) {
maskee <- patternGrob("circle", gp = gpar(col = "black", fill = "yellow"),
spacing = 0.1, density = 0.5)
angle <- seq(2 * pi / 4, by = 2 * pi / 6, length.out = 7)
x_hex_outer <- 0.5 + 0.5 * cos(angle)
y_hex_outer <- 0.5 + 0.5 * sin(angle)
x_hex_inner <- 0.5 + 0.25 * cos(rev(angle))
y_hex_inner <- 0.5 + 0.25 * sin(rev(angle))
gp <- gpar(lwd = 0, col = NA, fill = "white")
masker <- grid::pathGrob(x = c(x_hex_outer, x_hex_inner),
y = c(y_hex_outer, y_hex_inner),
id = rep(1:2, each = 7),
rule = "evenodd", gp = gp)
masked <- alphaMaskGrob(maskee, masker, use_R4.1_masks = FALSE)
grid.draw(masked)
}
#> Loading required package: grid
if (capabilities("png") && require("grid")) {
maskee_transparent <- rectGrob(gp = gpar(col = NA, fill = "blue"))
gp <- gpar(lwd = 20, col = "black", fill = grDevices::rgb(0, 0, 0, 0.5))
masker_transparent <- editGrob(masker, gp = gp)
masked_transparent <- alphaMaskGrob(maskee_transparent,
masker_transparent,
use_R4.1_masks = FALSE)
grid.newpage()
grid.draw(masked_transparent)
}