Chủ Nhật, 29 tháng 9, 2013

[J2SE]Phóng to và thu nhỏ hình ảnh

public static Image zoomInImage(Image img) {

 
    int[] rgbOutput = null;
    int width = 0, height = 0;
    int[] rgbInput = null;
    try {
 
        width = img.getWidth();
        height = img.getHeight();
        rgbInput = new int[width * height];
        rgbOutput = new int[(width << 1) * (height << 1)];
        img.getRGB(rgbInput, 0, width, 0, 0, width, height);
        int i, j, k;
        k = 0;
        for (i = 0; i < (height << 1); i += 2) {
            for (j = 0; j < (width << 1); j += 2) {
                if (j < 3) {
                    // System.out.println(i * (width << 1) + j);
                    // System.out.println((i + 1) * (width << 1) + j);
                    // System.out.println(i * (width << 1) + j + 1);
                    // System.out.println((i + 1) * (width << 1) + j + 1);
                }
                rgbOutput[i * (width << 1) + j] = rgbInput[k];
                rgbOutput[(i + 1) * (width << 1) + j] = rgbInput[k];
                rgbOutput[i * (width << 1) + j + 1] = rgbInput[k];
                rgbOutput[(i + 1) * (width << 1) + j + 1] = rgbInput[k];
                k++;
            }
        }
        return Image.createRGBImage(rgbOutput, width << 1, height << 1,
                                    true);
    } catch (OutOfMemoryError e) {
        // e.printStackTrace();
        ImageAlbum.showAlert("Kích thước hình ảnh quá lớn!!!");
        return img;
    } finally {
        rgbOutput = null;
        rgbInput = null;
    }
 
}
 
/***************************************************************************
 * Zoom out
 */
public static Image zoomOutImage(Image img) {
 
    int[] rgbOutput = null;
    int width = 0, height = 0;
    int[] rgbInput = null;
    try {
        width = img.getWidth();
        height = img.getHeight();
        // System.out.println(width >> 1);
        // System.out.println(height >> 1);
        rgbInput = new int[width * height];
        rgbOutput = new int[(width >> 1) * (height >> 1)];
        img.getRGB(rgbInput, 0, width, 0, 0, width, height);
        int i, j, k, k1;
        k = 0;
        k1 = 0;
        // System.out.println(height);
        // System.out.println(width);
        for (i = 0; i < height; i++) {
            for (j = 0; j < width; j += 2) {
                if (i % 2 == 0) {
                    if (k1 > width * height - 1
                        || k > (width >> 1) * (height >> 1) - 1) {
                        // System.out.println("k=" + k);
                        // System.out.println("k1=" + k1);
                        break;
                    }
                    rgbOutput[k] = rgbInput[k1];
                    k++;
                    k1 += 2;
                    // System.out.println(k);
                    // System.out.println(k1);
                } else {
                    k1 += 2;
 
                }
            }
        }
 
        return Image.createRGBImage(rgbOutput, width >> 1, height >> 1,
                                    true);
    } catch (OutOfMemoryError e) {
        // e.printStackTrace();
        ImageAlbum.showAlert("Kích thước hình ảnh quá lớn để thực hiện");
        return img;
    } finally {
        rgbOutput = null;
        rgbInput = null;
    }
 
}

1 nhận xét: