在 java 中翻转图像
Flipping an image in java
我正在尝试翻转 java 中的图像,但我 运行 遇到了一个我无法解决的问题。
我使用双循环,运行遍历 org 图像中的所有像素值,并将它们复制到像素 (width-x-1,y) 中的新图像。
下图描述了,当我运行这个方法时会发生什么。
由于某种原因,新图像似乎只 运行 通过图像高度的 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;
}
为什么要将临时值 private Pixel pixel
和 private 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;
}
这不包含完整的问题。你只需要调用 newImg.pixelsUpdated();在你 return 之前。但是 Whosebug 用户不可能知道这一点。
我正在尝试翻转 java 中的图像,但我 运行 遇到了一个我无法解决的问题。
我使用双循环,运行遍历 org 图像中的所有像素值,并将它们复制到像素 (width-x-1,y) 中的新图像。
下图描述了,当我运行这个方法时会发生什么。
由于某种原因,新图像似乎只 运行 通过图像高度的 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;
}
为什么要将临时值 private Pixel pixel
和 private 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;
}
这不包含完整的问题。你只需要调用 newImg.pixelsUpdated();在你 return 之前。但是 Whosebug 用户不可能知道这一点。