I've done some texturecompression experiments:
The original picture is only for referenz, the DXT1 picture I've create with a gimp exporter and the indexed picture is only for filling the space :P
Only the DXT5 verion is important. I use this steps to create it:
1. Load a image in gimp.
2. Create a Alphachanel from the Black Color (Colors->Color to Alpha)
3. Export the result as dds with DXT5 compression
The GPU is able to decompress in realtime and the shader needs only one additional multiplication. An verry simple GLSL fragmentshader for example:
uniform sampler2D Colormap;
vec4 color = texture2D(Colormap, vec2(gl_TexCoord));
gl_FragColor = color * color.a;
Teoretical it should be possble de decompress that with only using blending (ugly old stuff)
With a own specilised exporter the Quality could get close to the original. In special cases this algorithm would be able to store pictures with up to 16 bit dynamic range.