如何实现图片从右到左镜像?代码翻转方向错误问题求助
搞定图片左到右镜像的代码问题
嘿,我瞅了下你这段镜像代码的问题,现在实现成右到左镜像主要是两个关键地方写错了,咱们一步步来修正:
问题出在哪?
- 循环条件写反了:你写的
for (int col = 0; col > width/2 ; col++),col从0开始,0永远不会大于width/2,这个循环根本跑不起来?哦不对,可能你手滑写反了,应该是col < width/2,这样才会遍历前半部分的列,和后半部分的对称列交换像素。 - 对称列的索引算错了:
col-1-width会得到负数索引(比如width=10,col=0时,结果是-11),这明显不对,正确的对称右列索引应该是width - 1 - col,这样才能精准拿到当前左侧列对应的右侧对称位置。
修正后的完整代码
public void mirrorVerticalLeftToRight() { Pixel[][] pixels = this.getPixels2D(); Pixel leftPixel = null; Pixel rightPixel = null; int width = pixels[0].length; for (int row = 0; row < pixels.length; row++) { // 修正循环条件:只遍历前半列,避免重复交换 for (int col = 0; col < width/2 ; col++) { leftPixel = pixels[row][col]; // 修正对称索引:拿到右侧对应的像素 rightPixel = pixels[row][width - 1 - col]; // 交换两个像素的颜色值 int tempRed = leftPixel.getRed(); int tempGreen = leftPixel.getGreen(); int tempBlue = leftPixel.getBlue(); leftPixel.setColor(rightPixel.getRed(), rightPixel.getGreen(), rightPixel.getBlue()); rightPixel.setColor(tempRed, tempGreen, tempBlue); } } }
为啥这样改就对了?
- 循环只遍历每一行的前半部分列,这样我们只需要交换一次对称位置的像素,不会重复操作同一对像素。
width - 1 - col是水平镜像的标准索引计算方式:比如宽度为10时,col=0对应右侧的第9列,col=1对应第8列,完美对应左右对称的位置。- 交换两个像素的颜色值后,就实现了真正的左到右镜像——原图左边的内容会转到右边,右边的内容转到左边,和你想要的效果一致。
内容的提问来源于stack exchange,提问作者yfn ant
相关产品推荐
相关产品推荐

