knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) set.seed(1)
library(nara)
Blitting is a term used in computer graphics to describe the copying of whole or part of one image into another.
This copying is optinised for speed and forms a significant part of the underlying mechanics for 2D games and interactive applications. For example:
{nara} includes two blitting functions:
nr_blit()nr_blit_multi()nr_blit()Use nr_blit() when you want to use a single source image only
library(nara) # Create a canvas to draw on w <- 300 h <- 300 nr <- nr_new(w, h, 'grey90') # Place a deer on the canvas nr_blit(nr, deer[[1]], w/2, h/2) plot(nr)
# Create a canvas to draw on nr <- nr_new(w, h, 'grey90') # Place a deer on the canvas at many locations xs <- runif(20, 0, w) ys <- runif(20, 0, h) nr_blit(nr, deer[[1]], xs, ys) plot(nr)
# Create a canvas to draw on nr <- nr_new(w, h, 'grey90') # Place a deer on the canvas at many locations xs <- runif(20, 0, w) ys <- runif(20, 0, h) angles <- runif(20, 0, 2*pi) scales <- runif(20, 0.5, 2) nr_blit(nr, deer[[1]], xs, ys, angle = angles, scale = scales) plot(nr)
nr_blit_multi()If you have multiple source images to blit, there are two possible approaches:
nr_blit()nr_blit_multi()For most simple tasks, nr_blit() should be sufficient.
For larger structures, it may be useful to store blitting parameters in a data.frame for organisation purposes.
The {nara} packages includes a tileset (a list of nativerasters which
can tile together to form an image) and a tileset_config giving one
possible arrangement of tiles.
Combining tileset with tileset_config in nr_blit_multi() creates a
complex image with a single function call.
head(tileset_config) w <- 70 * 11 h <- 70 * 8 nr <- nr_new(w, h, fill = 'lightblue') nr_blit_multi(nr, tileset, config = tileset_config) plot(nr)
{nara} supports masked rendering of most drawing operations.
blit_mask_begin() and blit_mask_end() are used to delineate the use
of a mask on an image.
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Setup a drawing canvas and an image to use as a mask #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ w <- 300 h <- 300 canvas <- nr_new(w, h, fill = 'lightblue') mask <- nr_new(w, h, fill = 'transparent') # Set the top-left area of the mask to be the active area by making it # not transparent nr_rect(mask, x=0, y=0, w=w/2, h=h/2) plot(mask) # Attach the mask to the canvas nr_mask_begin(canvas, mask) { # Draw random deer on the image - xs <- runif(50, 0, w) ys <- runif(50, 0, h) nr_blit(canvas, deer[[1]], xs, ys) } nr_mask_end(canvas) # Finalise the masked operation plot(canvas)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.