In addition to the pixel values, the width and height of the image are also required, and the colour depth (how many colours are available per pixel). Some formats also specify an alpha value, for transparency, which may be defined per pixel in addition to the red, green and blue components.
There are many different image file formats but a simple one to experiment with to gain understanding is ppm, one of the Netpbm formats.
Netpbm defines the following file types:
- PBM: portable bitmap (pixels are either on or off)
- PGM: portable graymap (grayscale pixels)
- PPM: portable pixmap (full colour pixels)
These have the advantages of being simple to understand, and easy to generate in a text editor for working with simple examples.
For example, a PPM file is simply the characters "P3" to identify it as PPM, followed by the width, height, maximum colour value and the pixel values in English reading order (left to right then top to bottom). Each pixel colour is a red value, a green value, and a blue value. All these values are space separated and human readable.
P3 # Indicates an ASCII PPM file
2 2 # Width and height of the image
255 # Maximum colour value
255 0 0 0 255 0 # A red pixel (255 0 0) followed by a green pixel
0 0 255 255 255 255 # A blue pixel followed by a white pixel
While this makes the format very easy to work with for small examples, it will also make the file size much larger than other formats which use bytes to represent colour components instead of writing out the human readable numbers. Many formats also include compression (either lossless or lossy).
Once you are accustomed to writing PPM files in ASCII characters, indicated by the file starting with "P3", you can move on to PPM files using bytes, indicated by the file starting with "P6". This is a similar format to what many programs use internally, but is no longer human readable in a text editor as not every byte will correspond to a printable ASCII character.
You also mention that a pixmap can have pixel values that refer to colours stored elsewhere in the file. I have avoided this format as it is not necessary for understanding how a pixmap works. This is known as using a palette (a list of predefined colours so each pixel is represented by an index of a colour in the palette). This is necessary for formats that only allow a small number of distinct colours, but for full colour images there is no need for a palette - each pixel is defined as red, green and blue components without having to refer to anything else.