Как сделать определенные вещи с 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() {

0 ответов

Другие вопросы по тегам