【问题标题】:Flipping an image in java在java中翻转图像
【发布时间】:2015-12-13 15:32:17
【问题描述】:

我正在尝试在 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;
}

【问题讨论】:

  • 您确定img.getHeight() 返回的高度正确吗?
  • 什么是图像?它不能是 java.awt.Image,因为它正在使用该构造函数。
  • 它的 .jpg,是的 - img.getHeight() 返回应有的高度

标签: java image for-loop pixel mirror


【解决方案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;
}

【讨论】:

  • 除了相同的结果外,没有其他任何结果。问题可能出在 Image 类本身吗?我认为它不太可能,因为使用相同的算法来反转颜色,例如,结果正确。任何其他想法,可能是什么原因造成的?
  • 好的,所以我们需要检查几个地方。首先,确保您的ij 变量实际上一直递增到img.getWidth()img.getHeight()。如果是这样,请尝试将 newimg 写入文件并自己打开它,问题可能在于您如何在 java 中显示 newimage。
  • 发现问题。忘记包含我根据更改的像素更新图像的方法。不过还是感谢您的帮助!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 2019-01-26
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 2013-07-01
    相关资源
    最近更新 更多