Ich lese Bits aus einer monochromen Bitmap. Ich speichere alle 16 Bits in einer short
in umgekehrter Reihenfolge. Wenn das Bit in der Bitmap schwarz ist, speichert ein 1. Wenn weiß, speichern Sie einen 0.Verschieben des Vorzeichen-Bits in .NET
ZB: für Bitmap: BBBW BBBW BBBW wwww
meine kurz ist: 0000 0111 0111 0111
Der erste Weg ich habe versucht, dies zu tun war:
short m;
// ...
Color c = bmp.GetPixel(j, i);
if (c.R == Color.Black)
m |= short.MinValue;
m >>= 1;
// ...
nach einer Zuordnung und Verschiebung, bekam ich den erwarteten -32768 (1000 0000 0000 0000).
Nach dem zweiten Mal habe ich -16384 (1100 0000 0000 0000).
Ich habe meinen Code auf ushort
geändert und die if
Zeile zu s |= (ushort)Math.Pow(2, 15);
geändert und jetzt funktioniert es.
Meine Frage ist: Warum wird das Zeichen Bit in .NET nicht verschieben? Gibt es eine Möglichkeit, das Vorzeichenbit zu verschieben?
Um es effizient zu halten, können Sie einfach m ‚ushort‘ anstelle von ‚kurz‘, oder starten Sie aus dem Bit ganz rechts und links verschieben machen (nur mit Math.Pow zu vermeiden). – Groo