volteando una matriz multidimensional java

Tengo una clase que crea un lienzo de caracteres con un ancho y alto deseados.

dentro de este tengo un método drawLetter () (que básicamente cambia los caracteres para que aparezca una letra en el lienzo (como un arte ASCII muy simple)

tengo otros 3 métodos rotateClockwise, flipHorizontal, y flipVertical

Girar y voltear. He funcionado bien. Funcionan bien, pero parece que no puedo entender dónde estoy yendo mal al voltear la matriz verticalmente (por interés, creo que tengo horizontal y verticalmente al revés, pero pongo una muestra de lo que estoy intentando. para hacer más abajo)

esto es lo que no puedo resolver:

esta:

# # # ~
~ # ~ ~
~ # ~ ~
~ ~ ~ ~

a esto:

~ # # #
~ ~ # ~
~ ~ # ~
~ ~ ~ ~

Obviamente, se hará en un bucle for como mis otros métodos, a continuación, publicaré el método que ya he hecho para horizontal y girar en sentido horario para demostrar que no es tarea que no pueda hacer.

void mirrorHorizontally()
{
    char[][]horizontalImage = new char[height][width];

    for (int i = 0; i < height /2; i++)
    { 
       for(int j = 0; j < width; j++)
       {  
           horizontalImage[height - (i+1)][j] = canvasArray[i][j];           
           horizontalImage[i][j] = canvasArray[height - (i+1)][j];
       }
    }   
    printPicture(horizontalImage);
}


void rotateClockwise()
{
    char[][] rotatedImage = new char[height][width];

    for(int i=0; i< canvasArray.length; i++)
    {
        for(int j= canvasArray.length-1; j >= 0; j--)
        {
            rotatedImage[i][rotatedImage.length-1-j] = canvasArray[j][i]; 
        }
    }

    printPicture(rotatedImage);
}

canvasArray es la imagen original sin interés en una variable de clase char [] []

Respuestas a la pregunta(1)

Su respuesta a la pregunta