\name{resize}

\alias{flip}
\alias{flop}
\alias{resize}
\alias{rotate}

\concept{transformation}
\concept{rotation}
\concept{resize}
\concept{mirror}

\title{Spatial linear transformations}

\description{
  Rotates, mirrors and resizes images. 
}

\usage{
  flip(x)
  flop(x)
  resize(x, w, h, blur=1, filter="Lanczos")
  rotate(x, angle=90)
}

\arguments{
  \item{x}{An \code{Image} object or an array.}

  \item{w, h}{Width and height of a new image. One of these arguments
    can be missing to enable proportional resizing. }

  \item{blur}{The blur factor, where 1 (\code{TRUE}) is blurry,
    0 (\code{FALSE}) is sharp.}

  \item{filter}{Interpolating sampling filter.}

  \item{angle}{Image rotation angle in degrees.}
}

\value{
  An \code{Image} object or an array, containing the transformed version
  of \code{x}.
}

\details{
  \code{flip} transforms \code{x} in its vertical mirror image by
  reflecting the pixels around the central x-axis.
  
  \code{flop} transforms \code{x} in its horizontal mirror image by
  reflecting the pixels around the central y-axis.

  \code{resize} scales the image to the desired dimensions using the supplied
  interpolating filter. Available filters are: \code{Point}, \code{Box},
  \code{Triangle}, \code{Hermite}, \code{Hanning}, \code{Hamming},
  \code{Blackman}, \code{Gaussian}, \code{Quadratic}, \code{Cubic},
  \code{Catrom}, \code{Mitchell}, \code{Lanczos}, \code{Bessel} and
  \code{Sinc}. The filter \code{Box} performs a nearest-neighbor
  interpolation and is fast but introduces considerable aliasing. The
  filter \code{Triangle} performs a bilinear interpolation and is a
  good trade-off between speed adn aliasing. Cubic interpolation with
  the filter \code{Cubic} is also a good trade-off. High-quality and slower
  interpolation is achieved with the \code{Lanczos} filter. The
  algorithm used by this ImageMagick function is not well defined.
  
  \code{rotate} rotates the image counter-clockwise with the specified
  angle. Rotated images are usually larger than the originals and have
  empty triangular corners filled in black. The algorithm used by this
  ImageMagick function is not well defined.
}

\seealso{ \code{translate} 
}

\references{
  \emph{ImageMagick}: \url{http://www.imagemagick.org}.
}

\author{
  Oleg Sklyar, \email{osklyar@ebi.ac.uk}, 2006-2007
}

\examples{
   x = readImage(system.file("images", "lena.gif", package="EBImage"))
   if (interactive()) display(x)

   y = flip(x)
   if (interactive()) display(y, title='flip(x)')

   y = flop(x) 
   if (interactive()) display(y, title='flop(x)')

   y = resize(x, 128) 
   if (interactive()) display(y, title='resize(x, 128)')

   y = rotate(x, 30) 
   if (interactive()) display(y, title='rotate(x, 30)')
}