HI,
I did have the same idea yesterday to get a 4bit gray-scale image.
Another idea is to send an image progressively. Suppose you have an image of 8x8 pixels. Then you send the pixels in this order:
// layer 0 lowest resolution (stepsize n/2)
[0,0]
[4,0]
[0,4]
[4,4]
// layer 1 (stepsize n/4 but not those already send)
[2,0], [6,0]
[0,2], [2,2], [4,2], [6,2]
[2,4], [6,4],
[0,6], [2,6], [4,6], [6,6]
// layer 2 (stepsize n/8 but not those already send => which are all remaining pixels for an 8x8 bitmap.
[1,0], [3,0], 5,0], [7,0]
etc
There advantage of progressive images is that you get an idea of the overall picture and it refines gradually.
It also allows to stop transmitting when the resolution is high enough.
Besides the proposed schema, there are many more schemas. The best known is the alternating lines.
First send all the even lines and than all odd lines.
Another speed up of transmission could be run length encoding. This is especially useful if you go to the 4 bit modes.
A byte could become a {run length; colour } tuple, with a run length of 1..15 and a 4 bit colour.
If you have 6 bytes of a certain colour (e.g. colour 9) you send { 6, 9 } or as byte B0110 1001