bitmap copies of plots
Prof Brian Ripley
Prof Brian Ripley <ripley@stats.ox.ac.uk>
Mon, 4 Oct 1999 11:59:44 +0100 (BST)
Michael Lapsley was suggesting on R-help direct copies to gif/png/jpeg.
The following seems to do a sensible job for me of copying the current
device to any bitmap format supported by gs. The manipulation is needed
to work around assumptions made by postscript(), and I think better fixed
in postscript() (but not a couple of days before a release).
I want to make onefile=FALSE work on postscript() (it needs to start
a file for each page, and give it a EPSF-3.0 header), and to allow
user-specified paper sizes and the option of not centring on the page.
Oh, and I do know it is gswin32c on Windows: that is easy to incorporate
but I have not tested it.
One could attempt to retrieve height and width from the current device,
but I don't see that information is presently available from R code.
Any comments?
dev2bitmap <- function(file, type="png256", height=6, width=6, res=72,
pointsize, ...)
{
rc <- system("gs -help > /dev/null")
if(rc != 0) stop("Sorry, gs cannot be found")
gs <- system("gs -help", intern=TRUE)
st <- grep("^Available", gs)
en <- grep("^Search", gs)
gs <- gs[(st+1):(en-1)]
devs <- c(strsplit(gs, " "), recursive=T)
if(match(type, devs, 0) == 0)
stop(paste(paste("Device ", type, "is not available"),
"Available devices are",
paste(gs, collapse="\n"), sep="\n"))
if(missing(pointsize)) pointsize <- 1.5*min(width, height)
tmp <- tempfile("Rbit")
on.exit(unlink(tmp))
dev.print(device=postscript, file=tmp, width=width,
height=height, pointsize=pointsize, horizontal=F, ...)
psfile <- scan(tmp, what="", sep="\n", quiet=TRUE)
bb <- strsplit(psfile[9], " ")[[1]]
ep <- grep("^%%EndProlog", psfile)
unlink(tmp)
tmp2 <- tempfile("Rbit")
on.exit(unlink(tmp2))
cat(psfile[1:ep], file=tmp2, sep="\n")
cat(paste("-",bb[2], " -", bb[3], " translate\n", sep=""),
file=tmp2, append=TRUE)
cat(psfile[(ep+1):length(psfile)], file=tmp2, sep="\n", append=TRUE)
cmd <- paste("gs -dNOPAUSE -dBATCH -q -sDEVICE=", type,
" -r", res,
" -g", ceiling(res*width), "x", ceiling(res*height),
" -sOutputFile=", file, " ", tmp2, sep="")
system(cmd)
invisible()
}
--
Brian D. Ripley, ripley@stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272860 (secr)
Oxford OX1 3TG, UK Fax: +44 1865 272595
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._