public UInt16 ConvierteA16Bit(Int32 color)
{
byte uno, dos, tres;
/* Separar las componentes de byte
* para poder posteriormente calcular la proporcion
* independiente por cada componente de color.*/
uno = (byte)(color & 0x000000FF);
dos = (byte)((color & 0x0000FF00)>>8);
tres= (byte)((color & 0x00FF0000)>>16);
/* Calcular proporciones por regla de tres
* es decir ej.:
* valor byte max valor
* uno 255 (0xFF, es decir maximo 8 bits prendidos)
* ? 31 (0x1F, es decir maximo 5 bits prendidos)
*
* ? = uno * 31 /255 => ? = (0x1F*uno/0xFF)
* */
uno= (byte)(0x1F*uno/0xFF);
tres=(byte)(0x1F*tres/0xFF);
dos= (byte)(0x3F*dos/0xFF);
return (ushort)( (uno|(dos <<5)) |
( (tres<<3 | dos>>3 ) ) <<8 );
}