Sto leggendo bit da una bitmap monocromatica. Sto memorizzando ogni 16 bit in un short
nell'ordine inverso. Se il bit nella bitmap è nero, memorizzare un 1. Se il bianco, memorizzare uno 0.Spostamento del bit di segno in .NET
Esempio: per bitmap: BBBW BBBW BBBW wwww
mio breve è: 0000 0111 0111 0111
Il primo modo ho provato a fare questo è stato:
short m;
// ...
Color c = bmp.GetPixel(j, i);
if (c.R == Color.Black)
m |= short.MinValue;
m >>= 1;
// ...
Dopo un incarico e lo spostamento, ho avuto l'aspettavo -32768 (1000 0000 0000 0000).
Dopo la seconda volta ho ottenuto -16384 (1100 0000 0000 0000).
Ho modificato il mio codice per utilizzare ushort
e modificato la riga if
in s |= (ushort)Math.Pow(2, 15);
e ora funziona.
La mia domanda è: perché il bit di segno non si sposta in .NET? C'è un modo per spostare il bit del segno?
per mantenerlo efficiente, si può semplicemente fare m 'ushort' invece di 'breve', o iniziare dal bit più a destra e spostare a sinistra (solo per evitare di utilizzare Math.pow). – Groo