From hb at stat.berkeley.edu  Fri Jan 26 09:01:02 2007
From: hb at stat.berkeley.edu (Henrik Bengtsson)
Date: Fri, 26 Jan 2007 00:01:02 -0800
Subject: [Rd] Inferring dimensions on bitmap device from par()
In-Reply-To: <Pine.LNX.4.64.0701260605490.24309@gannet.stats.ox.ac.uk>
References: <59d7961d0701251735i5f71f989g8c16704e7605d799@mail.gmail.com>
	<Pine.LNX.4.64.0701260605490.24309@gannet.stats.ox.ac.uk>
Message-ID: <59d7961d0701260001p416e9c4nc7aec6fdcb3effc0@mail.gmail.com>

On 1/25/07, Prof Brian Ripley <ripley at stats.ox.ac.uk> wrote:
> You asked
>
> > (or ultimately the dimension of the generated plot in pixels) without
> > know which of png(), jpeg() or bitmap() was used?
>
> That is determined by arguments 'width' and 'height' in the call to the
> device, and for the first two it is in pixels and for the third it is in
> inches.  Internally these are just numbers, and in particular the R
> graphics system does not know the resolution to be used in pixelization.
> Since some graphics parameters assume 'inches' and some 'pixels',
> assumptions have to be made.  png() assumes 96dpi and postscript() assumes
> 72dpi.

Thanks. That is useful to know.

>
> You had the information you asked for, so why not just use it?

The function plotting does not know about the device, and I want to be
able to keep fixed-sized margins in the output (assuming bitmap
images).

> R is not claiming to be your keeper.

That is one of the answers I expected and wanted to hear given that it
was the case.

/Henrik

>
> On Thu, 25 Jan 2007, Henrik Bengtsson wrote:
>
> > Hi,
> >
> > I am trying to infer the dimension of an opened bitmap (png, jpeg,
> > bitmap device...) from par() parmeters.  From the help on par(), I
> > found that:
> >
> >> dim <- c(400, 200)
> >> png("foo.png", width=dim[1], height=dim[2])
> >> dim2 <- par("din") * par("cra") / par("cin")
> >> dev.off()
> >> dim2
> > [1] 399.9999 199.9999
> >
> > I've tried the above on Rv2.4.1 on WinXP and Linux with png() and
> > jpeg() and the precision is good enough.  However, when I turn to the
> > bitmap() device, I found the following:
> >
> >> s <- 3;  # Multiple of 72pt (default value of argument 'res' of bitmap())
> >> res <- s*72;
> >> bitmap("foo.png", width=dim[1]/res, height=dim[2]/res, res=res)
> >> dim2 <- par("din") * par("cra") / par("cin")
> >> dev.off()
> >> dim/dim2
> > [1] 3 3
> >
> > That is, dim/dim2 is not one, but equal to the multiple 's'.   I
> > understand that this is because bitmap() is not a device per se and
> > utilized postscript() plus a call to ghostscript.  But still, does
> > anyone know if it is possible to infer the correct resolution
> >
> > res2 <- s * par("cra") / par("cin")
> >
> > (or ultimately the dimension of the generated plot in pixels) without
> > know which of png(), jpeg() or bitmap() was used?  I know of
> > par("ps"), but its "unit" is device specific.
> >
> > Thanks
> >
> > Henrik
> >
> > ______________________________________________
> > R-devel at r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-devel
> >
>
> --
> Brian D. Ripley,                  ripley at 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 272866 (PA)
> Oxford OX1 3TG, UK                Fax:  +44 1865 272595
>



[Rd] Inferring dimensions on bitmap device from par()
Henrik Bengtsson