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

我们将图像表示为二维数组。如果要实现图像的垂直镜像,我们需要对称交换二维数组的列。但是在教师的代码中,为什么交换数组的行?结果是正确的。


    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) {}

    }


一只名叫tom的猫
浏览 84回答 1
1回答

慕的地8271018

它不是交换行;查看像素的声明: 像素 = 新的整数[img.getWidth()];宽度 / X 值是第一个 [],表示整个列。将切换它的部分与初始化它的部分进行比较。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java