public class ArrayRotation
extends java.lang.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 and Description |
|---|---|
private |
ArrayRotation() |
| Modifier and Type | Method and 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.
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 0java.lang.IllegalArgumentException - 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 truejava.lang.IllegalArgumentException - 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 truejava.lang.IllegalArgumentException - 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)