Vamos começar pela segunda parte, a parte do ponteiro pixel:
Você ou usa o * ou os []s, eles tem papel semelhantes. A forma mais recomendável de se escrever nesse caso é pixel[i][j], se fosse usar os asteriscos você teria que fazer algumas operações que deixaria seu código no mínimo estranho, para não dizer quase ilegível.
Agora a primeira parte:
Aqui novamente você usa um ou outro, nesse caso * ou ->
(*foto).x é a mesma coisa que foto->x
Note que se for usar o asterisco nesse caso você deve usar parênteses (isso se dá devido a precedência de operadores do C). Assim como no caso do pixel[i][j] tem uma forma mais elegante de se escrever, nesse caso nota-se que é foto->x
Então a forma mais elegante (e mais importante que elegância é estar certo) é foto->pixel[i][j]