为了账号安全,请及时绑定邮箱和手机立即绑定

如何实现阵列对称的两列交换?

如何实现阵列对称的两列交换?

一只名叫tom的猫 2022-09-28 14:44:15
我们将图像表示为二维数组。如果要实现图像的垂直镜像,我们需要对称交换二维数组的列。但是在教师的代码中,为什么交换数组的行?结果是正确的。    private void mirror() {        // TODO        for(int i = 0; i < dimX()/2; i++) {            int[] col = pixels[i];                               pixels[i] = pixels[dimX()-i-1];            pixels[dimX()-i-1] = col;        }    }所有代码:package ubung;import java.awt.image.*;import java.io.*;import javax.imageio.*;import java.util.Random;import java.util.Arrays;/** * Die Klasse Bildbearbeitung laedt eine Bilddatei und fuehrt  * abhaengig von gewaehlten Optionen eine Reihe von  * Bildmanipulationen aus.  */public class Bildbearbeitung {    private int[][] pixels;    /**     * Konstruktor fuer die Klasse Bildbearbeitung, die eine Bilddatei einliest     * und das zweidimensionale Pixel-Array pixels befuellt.     * @param file Einzulesende Bilddatei     */    private Bildbearbeitung(String file) {        try {            BufferedImage img = ImageIO.read(new File(file));            pixels = new int[img.getWidth()][img.getHeight()];            for(int i = 0; i < dimX(); i++)                for(int j = 0; j < dimY(); j++)                    pixels[i][j] = img.getRGB(i, j);        } catch (IOException e) {}    }       private int dimX(){        return pixels.length;    }    private int dimY(){        if(dimX() == 0)            return 0;        return pixels[0].length;    }    /**      * Diese Funktion schreibt den Inhalt des Pixelarrays in die     * Datei 'ausgabe.png'. Falls diese Datei nicht vorhanden ist,      * wird sie angelegt. Eine vorhandene Datei wird eventuell ueberschrieben!     */    private void save(String option){        BufferedImage img = new BufferedImage(dimX(), dimY(), 3);        for(int i = 0; i < dimX(); i++)            for(int j = 0; j < dimY(); j++)                img.setRGB(i, j, pixels[i][j]);        try {            File outputfile = new File("ausgabe-" + option + ".png");            ImageIO.write(img, "png", outputfile);        } catch (Exception e) {}    }
查看完整描述

1 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

它不是交换行;查看像素的声明: 像素 = 新的整数[img.getWidth()];

宽度 / X 值是第一个 [],表示整个列。

将切换它的部分与初始化它的部分进行比较。


查看完整回答
反对 回复 2022-09-28
  • 1 回答
  • 0 关注
  • 83 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信