Como fazer certas coisas em imagens 2D?
A chamada inversa vira a imagem para trás, da direita para a esquerda, ou seja, ela troca a primeira coluna pela última coluna, a segunda coluna da segunda à última coluna e assim por diante até que toda a imagem seja revertida.
A troca de chamada troca a área da imagem definida por um retângulo com largura 180 e altura 130 começando no índice de linha 50 e no índice de coluna 60 por um retângulo do mesmo tamanho começando no índice de linha 50 e no índice de coluna 260.
O deslocamento de chamada localiza uma imagem que está oculta nos dados da imagem, salvando o bit 7, deslocando os bits 0-6 uma posição para a esquerda e configurando o bit 0 para o valor salvo anteriormente do bit 7.
A troca de chamada restaura uma imagem na qual cada pixel foi embaralhado, trocando os 2 bits inferiores pelos 2 bits superiores. Para fazer isso, é necessário que seu código faça a mesma troca para restaurar a imagem.
NOTA: O valor máximo de um pixel (Picture.MAXVAL) é 255, portanto, apenas 8 bits são válidos para cada pixel. Estes são os bits numerados de 0 a 7, onde o bit 0 é igual a 1 e o bit 7 é igual a 128. Não são permitidos valores negativos.
Eu comecei a inverter para o trabalho, no entanto, consegui inverter de cabeça para baixo, não da direita para a esquerda. Alguém pode me ajudar a fazê-lo ir da direita para a esquerda? como que parte devo olhar ou como deve ser corrigida.
quanto à troca, estou perto, mas não completamente.
trocar e trocar, não sei como fazer isso.
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() {