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