在java中翻转图像

时间:2015-09-16 21:17:29

标签: java image for-loop pixel mirror

我正试图在java中翻转图像,但我遇到了一个我无法弄清楚的问题。

使用双循环,我正在遍历组织图像中的所有像素值,并将它们复制到像素中的新图像(width-x-1,y)。

下图描绘了运行该方法时会发生什么。

http://tinypic.com/r/nqzsiu/8

由于某种原因,新图像似乎只能达到图像高度的1/10。为什么这样,我该如何解决?

private Image img;
private Pixel pixel;
private Image newimg;
private Pixel newpixel;

public advancedFilters(Image img)
{
    this.img = img;
}

public Image Mirror(){
    newimg = new Image(img.getWidth(), img.getHeight(), "newimage");
    int curtone;
    for (int j=0; j<img.getHeight(); j++) {
        for (int i=0; i<img.getWidth(); i++) {
            pixel = img.getPixel(i,j);
            curtone = pixel.getValue();
            newpixel = newimg.getPixel(newimg.getWidth()-i-1, j);
            newpixel.setValue(curtone);

        }
    }
    return newimg;
}

2 个答案:

答案 0 :(得分:1)

为什么要将临时值private Pixel pixelprivate Pixel newpixel存储在其使用范围之外?这是不必要的(至少从您发布的代码)并且要求麻烦。尝试这种算法实现(看似正确):

private Image img;
private Pixel pixel;
private Image newimg;
private Pixel newpixel;

public advancedFilters(Image img)
{
    this.img = img;
}

public Image Mirror(){
    newimg = new Image(img.getWidth(), img.getHeight(), "newimage");
    for (int j=0; j<img.getHeight(); j++) {
        for (int i=0; i<img.getWidth(); i++) {
            Pixel oldPixel = img.getPixel(i,j);
            int oldPixelVal = oldPixel.getValue();
            Pixel mirrorPixel = newimg.getPixel((newimg.getWidth()-i-1), j);
            mirrorPixel.setValue(curtone);

        }
    }
    return newimg;
}

答案 1 :(得分:0)

这不包含完整的问题。你只需要调用newImg.pixelsUpdated();在你回来之前。但StackOverflow用户无法知道这一点。