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