Before OpenGL ES could see your texture, you had to load it into memory already, the generated texture names (glGenTextures) and bind it (glBindTexture). Your texture data is just a large array in memory.
Therefore, if you want to change one texel, you can manipulate it in memory and then bind it again. This approach is usually performed to generate a procedural texture. There are many resources available on the network, for example: http://www.blumtnwerx.com/blog/2009/06/opengl-es-texture-mapping-for-iphone-oolong-powervr/
While glReadPixels is available, there are very few situations where you will need to use it for interactive applications (the screen comes to the screen). This absolutely destroys performance. And it will not return the original textures, but instead will return a framebuffer block.
I do not know what effect you are looking for. However, if you target a device that supports pixel shaders, perhaps a custom pixel shader may do what you need.
Of course, I work under the assumption that you did not mean a pixel, as in screen coordinates.
source share