public Imagem transform(Imagem imagem, boolean fill) {
        Imagem newImagem = new Imagem(imagem.getWidth(), imagem.getHeight(), fill);
        int z = 1;
        int halfX = imagem.getWidth() / 2;
        int halfY = imagem.getHeight() / 2;
       
        
        for (int x = -halfX; x < halfX; x++) {
            for (int y = -halfY; y < halfY; y++) {
                int newX = (int) Math.round(x * matrizTransformacao[0][0] + y * matrizTransformacao[0][1] + z * matrizTransformacao[0][2]);
                int newY = (int) Math.round(x * matrizTransformacao[1][0] + y * matrizTransformacao[1][1] + z * matrizTransformacao[1][2]);
                
                newX += halfX;
                newY += halfY;
                
                if(newX >= imagem.getWidth() || newY >= imagem.getHeight() || newX < 0 || newY < 0) {
                    continue;
                }
                
                
                newImagem.setPixel(newX, newY, imagem.getPixel(x + halfX, y + halfY));
                
            }
        }
        
        
        if(fill) {
            newImagem = fill(newImagem);
        }
        
        
        return newImagem;
    }