public class ArrayRotation extends Object
The rotation by 90 and 270 degrees in-place (i.e., without using a second array to copy to) is based on ideas and code developed by others. See Rotation of arrays by Thomas W. Christopher.
I also got very useful advice from Hans-Bernhard Broeker and others in comp.graphics.algorithms. There is a thread titled In-place rotation of pixel images starting Oct 11, 2000.
Note: This class should be adjusted if Java ever supports genericity. Then rotation functionality could be provided for all kinds of arrays.
| Modifier | Constructor | Description |
|---|---|---|
private |
ArrayRotation() |
| Modifier and Type | Method | Description |
|---|---|---|
static void |
checkPixelArray(int[] pixels,
int width,
int height) |
This method checks several properties of the arguments.
|
static int[] |
flip(boolean inPlace,
int[] pixels,
int width,
int height) |
Flips the image given by the arguments.
|
private static int[] |
flip(int[] pixels,
int width,
int height) |
|
private static void |
flipInPlace(int[] pixels,
int width,
int height) |
Flips the argument image, i.e., the top line becomes the bottom line
and vice versa, etc.
|
static int[] |
rotate180(boolean inPlace,
int[] pixels,
int width,
int height) |
Rotates the argument image by 180 degrees.
|
static void |
rotate180(int width,
int height,
byte[] src,
int srcOffset,
byte[] dest,
int destOffset) |
|
static void |
rotate90Left(int width,
int height,
byte[] src,
int srcOffset,
byte[] dest,
int destOffset) |
|
static int[] |
rotate90Right(boolean inPlace,
int[] pixels,
int width,
int height) |
|
private static int[] |
rotate90Right(int[] pixels,
int width,
int height) |
|
static void |
rotate90Right(int width,
int height,
byte[] src,
int srcOffset,
byte[] dest,
int destOffset) |
|
private static void |
rotateInPlace180(int[] pixels,
int width,
int height) |
|
private static void |
rotateInPlace90Right(int[] pixels,
int width,
int height) |
public static void checkPixelArray(int[] pixels,
int width,
int height)
IllegalArgumentException is thrown.
Otherwise, nothing happens.
This method is supposed to be called at the beginning of several
other methods in this class.
Properties checked:
pixels is non-nullwidth and height are larger than zeropixels is at least width times heightprivate static final void flipInPlace(int[] pixels,
int width,
int height)
checkPixelArray(int[],int,int).
Then the image data is flipped in place, no additional memory is required.
Note that after applying this operation twice you will get the original
image back.pixels - the array of pixels that form the image to be flippedwidth - the horizontal resolution of the image; must be larger than 0height - the vertical resolution of the image; must be larger than 0IllegalArgumentException - if the arguments are invalidprivate static final int[] flip(int[] pixels,
int width,
int height)
public static final int[] flip(boolean inPlace,
int[] pixels,
int width,
int height)
inPlace - if true all work is done on the pixels array;
otherwise, a second array is allocated and the pixels array
remains unmodifiedpixels - the array of pixels that form the image to be flippedwidth - the horizontal resolution of the image; must be larger than 0height - the vertical resolution of the image; must be larger than 0pixels if
inPlace is trueIllegalArgumentException - if the pixel resolution
is invalid or the pixels array is not initialized or its length smaller
than width times heightpublic static int[] rotate180(boolean inPlace,
int[] pixels,
int width,
int height)
If inPlace is true, the rotation is done on the
argument pixels array.
Otherwise a new array of sufficient length is allocated and the
rotated image will be stored in this new array, not modifying the
content of the pixels array.
inPlace - determines whether the rotated image is written to the argument arraypixels - the array of pixels that form the image to be rotatedwidth - the horizontal resolution of the image; must be larger than 0height - the vertical resolution of the image; must be larger than 0pixels if
inPlace is trueIllegalArgumentException - if the pixel resolution
is invalid or the pixels array is not initialized or its length smaller
than width times heightprivate static void rotateInPlace180(int[] pixels,
int width,
int height)
public static void rotate90Left(int width,
int height,
byte[] src,
int srcOffset,
byte[] dest,
int destOffset)
public static void rotate90Right(int width,
int height,
byte[] src,
int srcOffset,
byte[] dest,
int destOffset)
public static void rotate180(int width,
int height,
byte[] src,
int srcOffset,
byte[] dest,
int destOffset)
private static void rotateInPlace90Right(int[] pixels,
int width,
int height)
private static int[] rotate90Right(int[] pixels,
int width,
int height)
public static int[] rotate90Right(boolean inPlace,
int[] pixels,
int width,
int height)