我們將圖像表示為二維數組。如果要實現圖像的垂直鏡像,我們需要對稱交換二維數組的列。但是在教師的代碼中,為什么交換數組的行?結果是正確的。 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 值是第一個 [],表示整個列。
將切換它的部分與初始化它的部分進行比較。
添加回答
舉報
0/150
提交
取消