You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现图片从右到左镜像?代码翻转方向错误问题求助

搞定图片左到右镜像的代码问题

嘿,我瞅了下你这段镜像代码的问题,现在实现成右到左镜像主要是两个关键地方写错了,咱们一步步来修正:

问题出在哪?

  • 循环条件写反了:你写的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:30:00