在Java中翻转图像时遇到问题
所以我必须使用java.awt.color来翻转一些导入的图像 以下是我实现在垂直轴上翻转图像的主要方法:在Java中翻转图像时遇到问题,java,image,colors,Java,Image,Colors,所以我必须使用java.awt.color来翻转一些导入的图像 以下是我实现在垂直轴上翻转图像的主要方法: public void execute (Pixmap target) { Dimension bounds = target.getSize(); // TODO: mirror target image along vertical middle line by swapping // each color on right with one
public void execute (Pixmap target)
{
Dimension bounds = target.getSize();
// TODO: mirror target image along vertical middle line by swapping
// each color on right with one on left
for (int x = 0; x < bounds.width; x++) {
for (int y = 0; y < bounds.height; y++) {
// new x position
int newX = bounds.width - x - 1;
// flip along vertical
Color mirrorVert = target.getColor(newX, y);
target.setColor(x, y, new Color (mirrorVert.getRed(),
mirrorVert.getGreen(),
mirrorVert.getBlue()));
}
}
}
public void执行(Pixmap目标)
{
维度边界=target.getSize();
//TODO:通过交换沿垂直中线镜像目标图像
//每种颜色在右边,一种在左边
对于(int x=0;x
但是,当执行此操作时,不是图像翻转,而是得到如下结果:
原件:
“翻转”:
谢谢你们的帮助
// flip along vertical
Color mirrorVert = target.getColor(newX, y);
target.setColor(x, y, new Color (mirrorVert.getRed(),
mirrorVert.getGreen(),
mirrorVert.getBlue()));
target.setColor(newX, y , new Color(255,255,255));
}
这在理论上应该是可行的。基本上是将右侧的颜色设置为白色,同时将其复制到左侧
其实这是行不通的。。。因此,您可以做的是将新颜色保存在一个数组中。然后你可以把所有的东西都变成白色,然后把交换的颜色放回去
for(int i=0;i
这在理论上应该是可行的。基本上,我们的想法是将右侧的颜色设置为白色,同时将其复制到左侧
实际上这不起作用…所以你可以做的是把新的颜色保存在一个数组中。然后你可以把所有的颜色都变成白色,然后把交换的颜色放回去
对于(int i=0;iWell,您并没有删除以前的颜色“通过将右侧的每种颜色交换为左侧的每种颜色来沿垂直中线镜像目标图像”-您基本上错过了“交换”部分您正在替换原地的颜色,因此当您从左侧读取像素时,它们已经被覆盖“交换x=4和y=2”然后你就可以y=x;x=y
。你最终会得到两者的值都是4(y=4,x=y=4)。@MuratK.那么我该如何删除以前的颜色呢?@zubergu我怎么会错过交换部分?我想当我设置新的x坐标时,我是在交换,你没有删除以前的颜色。”沿垂直中线镜像目标图像,方法是将右侧的每种颜色与左侧的每种颜色进行交换”-您基本上错过了“交换”部分您正在替换原有的颜色,因此当您从左侧读取像素时,它们已经被覆盖。这类似于“交换x=4和y=2”“然后你做了y=x;x=y
。你会得到两者的值都是4(y=4,x=y=4).@MuratK.那么我该如何删除之前的颜色呢?@zubergu我怎么会错过交换部分呢?我想当我设置新的X坐标时,我正在交换颜色,将颜色放入数组仍然不起作用,我不知道为什么-它只是使所有颜色都变白。@TylerA你能使用java.awt.Graphics2D吗?我认为这是不允许的“s赋值。只需awt.Color。@TylerA找到一个用于翻转的代码。尝试一下。但您必须稍微更改方法名称。将颜色放入数组仍然不起作用,我不知道为什么–它只会使所有内容变白。@TylerA您能用java.awt.Graphics2D吗?我认为这在这个赋值中是不允许的。只需awt.Color。@Tyl”erA发现了一个用于翻转的代码。请尝试一下。但是您必须稍微更改方法名称。
for (int i=0;i<image.getWidth();i++)
for (int j=0;j<image.getHeight();j++)
{
int tmp = image.getRGB(i, j);
image.setRGB(i, j, image.getRGB(i, image.getHeight()-j-1));
image.setRGB(i, image.getHeight()-j-1, tmp);
}