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

Java图像镜像翻转问题:代码仅翻转一半的修复方案

图像镜像翻转代码修复方案

我尝试通过操作像素实现图像镜像翻转(不使用2DGraphics API),但当前代码只能翻转图像的一半,不知道怎么修复。

  • 原始图像:正常的横向图像
  • 目标效果:横向镜像翻转后的图像
  • 当前错误结果:图像仅左半部分重复,未完成完整镜像

错误代码

public static void applyMirror(BufferedImage img) {
    int width = img.getWidth();
    int height = img.getHeight();
    for(int j = 0; j < height; j++){
        for(int i = 0, w = width - 1; i < width; i++, w--){
            int p = img.getRGB(i, j);
            img.setRGB(w, j, p);
        }
    }
}

问题原因

你的循环遍历了整行所有像素,当i走到行的后半段时,w会指向行的前半段——但此时前半段的像素已经被你之前的操作覆盖成了后半段的原始值,导致最终整行都变成了左半部分的重复,相当于把左半部分复制到了整个行,而非真正的镜像翻转。

修复代码

public static void applyMirror(BufferedImage img) {
    int width = img.getWidth();
    int height = img.getHeight();
    for(int j = 0; j < height; j++){
        // 只遍历每行前半部分,避免重复交换
        for(int i = 0; i < width / 2; i++){
            int mirrorIndex = width - 1 - i;
            // 先保存两个对称位置的原始像素
            int leftPixel = img.getRGB(i, j);
            int rightPixel = img.getRGB(mirrorIndex, j);
            // 交换两个位置的像素
            img.setRGB(mirrorIndex, j, leftPixel);
            img.setRGB(i, j, rightPixel);
        }
    }
}

修复说明

只遍历每行的前半部分,交换当前位置i和其对称位置width-1-i的原始像素,这样既不会覆盖未读取的原始数据,也能完成左右对称的镜像翻转,最终得到正确的效果。

内容的提问来源于stack exchange,提问作者KajSech

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 07:48:21