Я читаю биты из монохромного растрового изображения. Я сохраняю каждые 16 бит в short
в обратном порядке. Если бит в растровом изображении черный, сохраните 1. Если белый, сохраните 0.
Например: для растрового изображения: bbbw bbbw bbbw wwww
мой короткий: 0000 0111 0111 0111
Первый способ, которым я пытался это сделать:
short m;
// ...
Color c = bmp.GetPixel(j, i);
if (c.R == Color.Black)
m |= short.MinValue;
m >>= 1;
// ...
После одного задания и смены я получил ожидаемый -32768 (1000 0000 0000 0000).
После второго раза я получил -16384 (1100 0000 0000 0000).
Я изменил свой код на использование ushort
и изменил строку if
на s |= (ushort)Math.Pow(2, 15);
, и теперь он работает.
Мой вопрос: почему бит знака не изменяется в .NET? Есть ли способ сдвинуть знаковый бит?