Title: | Bitmap Images / Pixel Maps |
---|---|
Description: | Functions for import, export, visualization and other manipulations of bitmapped images. |
Authors: | Roger Bivand [aut] , Friedrich Leisch [aut] (<https://orcid.org/0000-0001-7278-1983>, maintainer 2001-2024), Martin Maechler [aut] , Achim Zeileis [cre] |
Maintainer: | Achim Zeileis <[email protected]> |
License: | GPL-2 |
Version: | 0.4-13 |
Built: | 2024-09-20 09:51:59 UTC |
Source: | CRAN |
This method allows the addition of a re-scaled pixmap to an existing
plot, possibly as a logo, optionally preserving aspect. It may be
used interactively with locator
, and is positioned in the
coordinate system of the plot region. Since the logo is displayed
using image
, it does not yet seem possible to use the function
outside this region.
addlogo(x, ...) ## S4 method for signature 'pixmap' addlogo(x, px, py, asp = NULL)
addlogo(x, ...) ## S4 method for signature 'pixmap' addlogo(x, px, py, asp = NULL)
x |
an object of class |
px |
a vector of two x coordinates, or a list with two named
elements x and y, such as that returned by |
py |
if px is not a list, a vector of two y coordinates |
asp |
if omitted or NULL (default), output respects both y coordinates, if a number greater than zero, aspect is preserved in proportion to the difference between x coordinates, multiplied by asp, and only the first y coordinate is respected. |
... |
potentially further arguments passed to and from methods. |
The same pixmap object with changed bounding box and cell resolution
Roger Bivand
x <- read.pnm(system.file("pictures/logo.ppm", package="pixmap")[1]) plot(x) for (i in 1:7) addlogo(x, px=c(0, (101/77)*11), py=c((i-1)*11, i*11), asp=1)
x <- read.pnm(system.file("pictures/logo.ppm", package="pixmap")[1]) plot(x) for (i in 1:7) addlogo(x, px=c(0, (101/77)*11), py=c((i-1)*11, i*11), asp=1)
Functions for manipulation and extraction of colors from
channel-based pixmap formats. Methods for generic addChannels
adds the
color channels of a colored pixmap and returns a grey version. Methods
for generic getChannels
return numeric matrices or arrays
containing the specified channels.
addChannels(object, coef = NULL) getChannels(object, colors = "all")
addChannels(object, coef = NULL) getChannels(object, colors = "all")
object |
Object of class |
coef |
Coefficients for the color channels, a numeric vercot with
as many elements as there are color channels in the pixmap. The
default for RGB is |
colors |
Character vector naming the color channels that shall be
extracted. The default of |
Friedrich Leisch
x <- pixmapRGB(rep(1:5, 3), nrow=4) plot(x) print(x) getChannels(x) getChannels(x, colors=c("red", "green")) y = addChannels(x) plot(y) print(y) ## extract only the red channel y = addChannels(x, coef=c(1,0,0)) plot(y)
x <- pixmapRGB(rep(1:5, 3), nrow=4) plot(x) print(x) getChannels(x) getChannels(x, colors=c("red", "green")) y = addChannels(x) plot(y) print(y) ## extract only the red channel y = addChannels(x, coef=c(1,0,0)) plot(y)
The family "pixmap"
(“pixel maps”) of classes provides
methods for creating,
plotting and converting bitmapped images in three different formats:
RGB, grey and indexed pixmaps.
pixmap(data=NULL, nrow=dim(data)[1], ncol=dim(data)[2], bbox=NULL, bbcent=FALSE, cellres=NULL) pixmapRGB(data, ...) pixmapGrey(data, ...) pixmapIndexed(data, col, ...)
pixmap(data=NULL, nrow=dim(data)[1], ncol=dim(data)[2], bbox=NULL, bbcent=FALSE, cellres=NULL) pixmapRGB(data, ...) pixmapGrey(data, ...) pixmapIndexed(data, col, ...)
data |
An optional data vector. |
nrow |
Vertical size of the image in pixels. |
ncol |
Horizontal size of the image in pixels. |
bbox |
Bounding box of the image, vector of length 4 of form |
bbcent |
Logical, if |
cellres |
Numeric vector of length 1 or 2, specifies the resolution of pixels in horizontal and vertical direction. If only one value is given, resolution in both directions is identical. |
col |
Character vector of colors to use for indexed pictures, or
a function like |
... |
Additional arguments passed to |
If the data
argument is 2- or 3-dimensional, nrow
and
ncol
default to the first two dimensions of data
, such
that pixmap
does the expected when given a matrix or an array.
The arguments bbox
, bbcent
and cellres
can be
used to specify a coordinate system for the image. Note that together
with nrow
and ncol
the coordinate system is
overspecified, hence not all parameters must be specified, the rest is
computed or set to sensible defaults.
For bbcent=FALSE
we have
cellres[1] = (bbox[3]-bbox[1])/ncol
and
cellres[2] = (bbox[4]-bbox[2])/nrow
, for bbcent=TRUE
we get
cellres[1] = (bbox[3]-bbox[1])/(ncol-1)
and
cellres[2] = (bbox[4]-bbox[2])/(nrow-1)
.
The name pixmap
was chosen because both image
and
bitmap
are already used in R.
Friedrich Leisch
## A simple example x <- pixmapIndexed(rep(1:8, 9), nrow=6, col=terrain.colors(8)) plot(x) ## The same with different colors, and passing the function instead of ## a color vector x <- pixmapIndexed(rep(1:8, 9), nrow=6, col=rainbow) plot(x) plot(x, asp=.5, axes=TRUE) ## Read data from a file x <- read.pnm(system.file("pictures/logo.ppm", package="pixmap")[1]) plot(x) ## Another example that math can be beautiful x <- seq(-3,3,length=100) z1 <- outer(x,x,function(x,y) abs(sin(x)*sin(y))) z2 <- outer(x,x,function(x,y) abs(sin(2*x)*sin(y))) z3 <- outer(x,x,function(x,y) abs(sin(x)*sin(2*y))) ## Notice that we specify a bounding box to get the correct ## coordinates on the axes. z1, z2 and z3 are used as red, ## green and blue channel, respectively. z <- pixmapRGB(c(z1,z2,z3), 100, 100, bbox=c(-1,-1,1,1)) plot(z, axes=TRUE) ## look at a grey version plot(as(z, "pixmapGrey")) ## subsetting works as expected plot(z[1:20,]) plot(z[,1:40]) plot(z[1:20,10:40]) ## overlay different images using transparency ## base image as before x <- pixmapIndexed(rep(1:8, 9), nrow=6, col=terrain.colors(8)) plot(x) ## make a mask of vertical bars mask <- array(0,dim=c(6,12)) mask[,seq(1,12,3)] <- 1 ## plot this mask over existing image with transparent and black color plot(pixmapIndexed(mask,col=c("NA","#000000")),add=TRUE)
## A simple example x <- pixmapIndexed(rep(1:8, 9), nrow=6, col=terrain.colors(8)) plot(x) ## The same with different colors, and passing the function instead of ## a color vector x <- pixmapIndexed(rep(1:8, 9), nrow=6, col=rainbow) plot(x) plot(x, asp=.5, axes=TRUE) ## Read data from a file x <- read.pnm(system.file("pictures/logo.ppm", package="pixmap")[1]) plot(x) ## Another example that math can be beautiful x <- seq(-3,3,length=100) z1 <- outer(x,x,function(x,y) abs(sin(x)*sin(y))) z2 <- outer(x,x,function(x,y) abs(sin(2*x)*sin(y))) z3 <- outer(x,x,function(x,y) abs(sin(x)*sin(2*y))) ## Notice that we specify a bounding box to get the correct ## coordinates on the axes. z1, z2 and z3 are used as red, ## green and blue channel, respectively. z <- pixmapRGB(c(z1,z2,z3), 100, 100, bbox=c(-1,-1,1,1)) plot(z, axes=TRUE) ## look at a grey version plot(as(z, "pixmapGrey")) ## subsetting works as expected plot(z[1:20,]) plot(z[,1:40]) plot(z[1:20,10:40]) ## overlay different images using transparency ## base image as before x <- pixmapIndexed(rep(1:8, 9), nrow=6, col=terrain.colors(8)) plot(x) ## make a mask of vertical bars mask <- array(0,dim=c(6,12)) mask[,seq(1,12,3)] <- 1 ## plot this mask over existing image with transparent and black color plot(pixmapIndexed(mask,col=c("NA","#000000")),add=TRUE)
The family "pixmap"
(“pixel maps”) of classes provides
methods for creating,
plotting and converting bitmapped images in currently three different
formats: RGB ("pixmapRGB"
), grey
("pixmapGrey"
)and indexed pixmaps ("pixmapIndexed"
).
Objects can be created by calls of the form new("pixmap", ...)
or
using the creator functions pixmap
(similar for all child
classes of name ("pixmapXXX"
).
size
:Object of class "integer"
and length 2
(number of rows and columns).
cellres
:Object of class "numeric"
and length
2 specifying the cell resolution of each pixel in user coordinates.
bbox
:Object of class "numeric"
and length 4,
the coordinates of the bounding box (x bottom, y bottom, x top, y
top).
channels
:A character vector naming the channel slots
of the object (NULL
for indexed pixmaps).
red
, green
, blue
:Only for class
"pixmapRGB"
with matrices specifying the red, green
and blue
channel of the picture.
grey
:Only for class
"pixmapGrey"
, a matrix specifying the grey intensity
(0=black, 1=white) of the picture.
col
:Only for class
"pixmapGrey"
, a character vector with a map of color
names.
index
:Only for class
"pixmapIndexed"
, an integer matrix with codes from the
color map.
Class "pixmap"
specifies the basic geometry of a picture: the
size in pixels together with information for an optional coordinate
system, see pixmap
for details.
Grey and indexed pixmaps are besically matrices (contained in the
grey
or index
slot, respectively). The element [1,1]
corresponds to the upper left corner as usual. For grey pixmaps the
elements must be between 0 (black) and 1 (white). Indexed pixmaps have
integer elements, each giving the index number corresponding to the
palette specified in slot "col"
.
Colors are given using the usual R
color strings (either names like "red"
or hex values like
"#FF0000"
). Alternatively, a function to create a color palette
can be specified, see rainbow
or
heat.colors
for examples.
RGB pixmaps have three matrices for each of the three color channels. Elements of the matrices must be between 0 (=color off) and 1 (=color at maximum intensity).
Methods for coercion between all formats are available.
Class "pixmapChannels"
is a
helper parent class currently containing classes "pixmapRGB"
and "pixmapGrey"
.
Friedrich Leisch
Reading and writing of bitmap images in PBM (black/white), PGM (grey) and PPM (color) format.
read.pnm(file, ...) write.pnm(object, file= NULL, forceplain = FALSE, type = NULL, maxval = 255)
read.pnm(file, ...) write.pnm(object, file= NULL, forceplain = FALSE, type = NULL, maxval = 255)
file |
name of the pnm file (general
|
... |
further arguments passed to |
object |
an object of class |
forceplain |
logical; if true, an ASCII pnm file is written. Default is to write a binary (raw) file. |
type |
one of |
maxval |
the maximum color-component value; the default is a colour depth of 8 bits, i.e., the integer 255. |
read.pnm
reads a pnm file and loads the image into an
object of class pixmap
.
write.pnm
writes an object of class pixmap
to a
pnm file, the type
argument controls wheter the written image
file is a black-and-white bitmap (pbm), grey (pgm) or color (ppm).
plot.pnm
plots a pnm object using the command
image
. The only difference is that the element [1,1]
of
pnmobj
is plotted as the upper left corner (plain
image
would plot [1,1]
as the lower left corner.
read.pnm
returns an object of class pixmapRGB
for color
pixmaps (ppm), and an object of class pixmapGrey
for pbm
and pgm. Note that the type of file as determined by the first
two bytes according to pnm standards is important, not the
extension of the file. In fact, the file name extension is
completely ignored.
Roger Bivand and Friedrich Leisch
x <- read.pnm(system.file("pictures/logo.ppm", package="pixmap")[1]) plot(x) print(x) x <- read.pnm(system.file("pictures/logo.pgm", package="pixmap")[1]) plot(x) x <- read.pnm(system.file("pictures/logo.pbm", package="pixmap")[1]) plot(x)
x <- read.pnm(system.file("pictures/logo.ppm", package="pixmap")[1]) plot(x) print(x) x <- read.pnm(system.file("pictures/logo.pgm", package="pixmap")[1]) plot(x) x <- read.pnm(system.file("pictures/logo.pbm", package="pixmap")[1]) plot(x)