En el formato de 16bits, la informacion del color se codifica con 5 bits para el rojo y el azul, y 6 para el verde. Para pasar de 24 a 16 bits se eliminan los 3 bits menos significativos de cada canal (o 2 en el caso del Verde).
La funcion siguiente convierte de 24 a 16 bits:
Código Delphi
[-]
function RGBTo16bit(R,G,B: Byte): Integer;
begin
Result:= ((B shr 3) shl 11) + ((G shr 2) shl 5) + (R shr 3);
end;
Para hacer el paso inverso solo tenemos que insertar ceros en las posiciones de los bits que faltan. La siguiente funcion convierte de 16 a 24 bits:
Código Delphi
[-]
function ToRGB(Color: Integer): Integer;
begin
Result:= ((Color and $F800) shl 8) + ((Color and $7E0) shl 5) +
((Color and $1F) shl 3)
end;
Ten en cuenta que como en el paso de convertir de 24 a 16 perdemos información, el paso inverso, de 16 a 24, nos devolverá un valor muy aproximado al original, pero no exactamente el mismo valor.