/***************************************************************************
 * http://blog.csdn.net/the3gwireless
 * 垂直镜像的方法
 */
public static Image verticalMirror(Image img) {

    int[] rgbOutput = null;
    int[] rgbInput = null;
    int width = 0, height = 0;
    int[][] tempArr = null;
    try {
        width = img.getWidth();
        height = img.getHeight();
        rgbInput = new int[width * height];
        rgbOutput = new int[width * height];
        img.getRGB(rgbInput, 0, width, 0, 0, width, height);
        int i, j, k;
        k = 0;
        tempArr = new int[height][width];

        for (i = 0; i < height; i++) {
            for (j = 0; j < width; j++) {
                tempArr[i][j] = rgbInput[k++];
            }
        }
        rgbInput = null; // 显式地设置为空值,告诉系统可以垃圾回收
        int[][] tempArr1 = new int[height][width];
        for (i = 0; i < height; i++) {
            for (j = 0; j < width; j++) {
                tempArr1[i][width - 1 - j] = tempArr[i][j];
            }
        }
        tempArr = null; // 显式地设置为空值,告诉系统可以垃圾回收
        k = 0;
        for (i = 0; i < height; i++) {
            for (j = 0; j < width; j++) {
                rgbOutput[k] = tempArr1[i][j];
                k++;

            }
        }
        tempArr1 = null; // 显式地设置为空值,告诉系统可以垃圾回收
        // return img;
        return Image.createRGBImage(rgbOutput, width, height, true);
    } catch (OutOfMemoryError e) {
        // e.printStackTrace();
        ImageAlbum.showAlert("图像尺寸太大,不能完成此操作.");
        return img;
    } finally {
        rgbOutput = null;
    }

}

/***************************************************************************
 *
 * 水平镜像的方法
 */
public static Image horizontalMirror(Image img) {

    int[] rgbOutput = null;
    int[] rgbInput = null;
    int width = 0, height = 0;
    int[][] tempArr = null;
    int[][] tempArr1 = null;
    try {
        width = img.getWidth();
        height = img.getHeight();
        rgbInput = new int[width * height];
        rgbOutput = new int[width * height];
        img.getRGB(rgbInput, 0, width, 0, 0, width, height);
        int i, j, k;
        k = 0;
        tempArr = new int[height][width];

        for (i = 0; i < height; i++) {
            for (j = 0; j < width; j++) {
                tempArr[i][j] = rgbInput[k++];
            }
        }
        rgbInput = null; // 显式地设置为空值,告诉系统可以垃圾回收
        tempArr1 = new int[height][width];
        for (i = 0; i < height; i++) {
            for (j = 0; j < width; j++) {
                tempArr1[height - 1 - i][j] = tempArr[i][j];
            }
        }
        tempArr = null; // 显式地设置为空值,告诉系统可以垃圾回收
        k = 0;
        for (i = 0; i < height; i++) {
            for (j = 0; j < width; j++) {
                rgbOutput[k] = tempArr1[i][j];
                k++;

            }
        }
        tempArr1 = null; // 显式地设置为空值,告诉系统可以垃圾回收
        return Image.createRGBImage(rgbOutput, width, height, true);
    } catch (OutOfMemoryError e) {
        // e.printStackTrace();
        ImageAlbum.showAlert("图像尺寸太大,不能完成此操作.");
        return img;
    } finally {
        rgbOutput = null;
    }

}