Как сделать определенные вещи с 2D-изображениями?
Вызов инвертирования поворачивает изображение назад справа налево, то есть он обменивает первый столбец для последнего столбца, второй столбец для второго столбца и т. Д., И так далее, пока все изображение не будет перевернуто.
Вызов обмена меняет местами область изображения, заданную прямоугольником шириной 180 и высотой 130, начиная с индекса строки 50 и индекса столбца 60, для прямоугольника того же размера, начиная с индекса строки 50 и индекса 260 столбца.
Вызов смещения находит изображение, которое скрыто в данных изображения, путем сохранения бита 7, смещения битов 0-6 на одну позицию влево и установки бита 0 в ранее сохраненное значение бита 7.
Вызов swap восстанавливает изображение, в котором каждый пиксель скремблирован путем замены нижних 2 битов на верхние 2 бита. Для этого требуется, чтобы ваш код делал тот же обмен для восстановления изображения.
ПРИМЕЧАНИЕ. Максимальное значение пикселя (Picture.MAXVAL) составляет 255, поэтому для каждого пикселя допустимо только 8 бит. Это пронумерованные биты 0-7, где бит 0 равен 1, а бит 7 равен 128. Отрицательные значения не допускаются.
Я получил инверсию на работу, однако, я получил ее, чтобы перевернуть вверх дном, а не справа налево. Может кто-нибудь помочь мне, как заставить его идти справа налево? как то, на какую часть я должен смотреть или как это должно быть исправлено.
Что касается обмена, я близко, но не совсем.
своп и сдвиг, я не знаю, как это сделать.
public class pictures {
// Picture object
Picture picture = null;
// Image data
int height;
int width;
int image[][];
// Constructor
public pictures() {
picture = new Picture();
}
// Read the image
public void readImage(String inFile) {
System.out.println("Reading image: " + inFile);
try {
picture.readPGM(inFile);
height = picture.getHeight();
width = picture.getWidth();
image = picture.getData();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
// Write the image
public void writeImage(String outFile) {
System.out.println("Writing image: " + outFile);
try {
picture.setData(image);
picture.writePGM(outFile);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
// Get image data
public int[][] imageData() {
return image;
}
// Invert the image
public void invert() {
int right;
int left;
for (right = 0, left = height - 1; right < left; right++, left--) {
int[] pic = image[left];
image[left] = image[right];
image[right] = pic;
}
}
// Exchange the image
public void exchange() {
for (int col = 60; col < 240; col++)
{
for (int row = 50; row < 180; row++) {
int pic= image[row][col];
image[row][col] = image[row][col+240];
image[row][col+240] = pic;
}
}
}
// Swap
public void swap() {
for (int row = 0; row < height; row++) {
for (int col = 0; col < width; col++) {
int pic = image[row][col];
int top = (pic & 0b11110000) >> 2;
int bottom = (pic & 0b00001111) << 2;
pic = top | bottom;
image[row][col] = pic;
}
}
}
public void shift() {