Estoy leyendo bits de un mapa de bits monocromo. Estoy almacenando cada 16 bits en un short
en el orden inverso. Si el bit del mapa de bits es negro, almacenar un 1. Si el blanco, almacenar una Ej 0.Cambiando el bit de signo en .NET
: de mapa de bits: BBBW BBBW BBBW wwww
mi corta es: 0000 0111 0111 0111
La primera forma traté de hacer esto era:
short m;
// ...
Color c = bmp.GetPixel(j, i);
if (c.R == Color.Black)
m |= short.MinValue;
m >>= 1;
// ...
Después de una asignación y desplazamiento, me la esperaba -32768 (1000 0000 0000 0000).
Después de la 2da vez que recibí -16384 (1100 0000 0000 0000).
He cambiado mi código para usar ushort
y he cambiado la línea if
al s |= (ushort)Math.Pow(2, 15);
y ahora funciona.
Mi pregunta es: ¿por qué el bit de signo no cambiará en .NET? ¿Hay alguna manera de cambiar el bit de signo?
para mantenerlo eficiente, usted podría simplemente hacer m 'ushort' en lugar de 'corto', o empezar desde el bit más a la derecha y la desviación a la izquierda (sólo para evitar el uso de Math.pow). – Groo