Unlike
traditional rotation
of images, where
every n'th pixel is sampled and copied to the result image,
this template provides much more accurate image
rotation features
(weighing the pixels).
template
is instantiated with a specific pixel format and must
be inherited to support pixel access functions for a
specific bitmap implementation. This provides
abstaction of the rotation mechanism from the actual
bitmap representation.
Major
features:
-
ides
professional quality image rotation.
-
Code
is optimized for image quality, not speed.
-
Rotated
image retains size and aspect ratio of
source image (destination image size is usally
bigger).
-
Supports
double precision rotation angles (0..360).
-
Supports
generic bitmap structures. Specific bitmap
structure is defined by inheritance.
-
Template
based - no need for libraries, DLLs etc. No
linkage problems.
How to
use the rotation
template:
You must
derive you own class from the rotation
template.
For
example:
class CRotateByShearRGB : public CRotateByShear<COLORREF>
will
define a concrete class where each pixel is of
COLORREF type.
Next,
you must override 5 abstract functions which support
creation, destruction of bitmap buffers and pixel
level access to the bitmap buffers.
Then you
instantiate your derived class and call the AllocAndRotate(...)
function which allocates a new destination bitmap
buffer and rotates the input image into it.
That's
it.
For
further instructions please view the attached sample
command-line project (Rotate.cpp). It is a simple
command line utility which reads PPM (ASCII or binary)
image file into a DIB structure, rotates
it and saves it to another PPM image
file.