コード例 #1
0
        public void TestBitPacking_Single16BitFrame()
        {
            // 1 frame, 5x3
            // 11111
            // 10010
            // 00000
            // continuous bit stream: 11111100 1000000x
            // continuous LE byte stream: 00111111 x0000001

            const string expectedResult = "111111001000000";
            var          overlayPixels  = SwapBytes(new byte[]   // written in big endian for ease of reading
            {
                0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
                0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
            });

            // little endian test
            {
                const int pixelCount = 3 * 5;
                byte[]    packedBits = new byte[(int)(Math.Ceiling(pixelCount / 8.0))];
                OverlayData.TestPack(overlayPixels, packedBits, 0, pixelCount, (ushort)0x00FF, false);
                var actualResult = FormatBits(packedBits, false).Substring(0, pixelCount);
                Assert.AreEqual(expectedResult, actualResult, "Error in packed bits for 16-bit case (little endian)");
            }

            // big endian test
            {
                const int pixelCount = 3 * 5;
                byte[]    packedBits = new byte[(int)(Math.Ceiling(pixelCount / 8.0))];
                OverlayData.TestPack(overlayPixels, packedBits, 0, pixelCount, (ushort)0x00FF, true);
                var actualResult = FormatBits(packedBits, true).Substring(0, pixelCount);
                Assert.AreEqual(expectedResult, actualResult, "Error in packed bits for 16-bit case (big endian)");
            }
        }
コード例 #2
0
        public void TestBitPacking_Multiple16BitFrames()
        {
            // 7 frames, each 3x2 (cols, rows) = 42 bits = 6 bytes
            // 111 111 111 111 111 111 111
            // 000 001 010 011 100 101 110
            // continuous bit stream: 11100011 10011110 10111011 11110011 11011111 10xxxxxx
            // continuous LE byte stream: 11000111 01111001 11011101 11001111 11111011 xxxxxx01

            const string expectedResult = "111000111001111010111011111100111101111110";
            var          overlayPixels  = SwapBytes(new byte[]   // written in big endian for convenience
            {
                // frame 1
                0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                // frame 2
                0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
                0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
                // frame 3
                0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
                0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
                // frame 4
                0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
                0x00, 0x00, 0x00, 0x10, 0x00, 0x10,
                // frame 5
                0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
                0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
                // frame 6
                0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
                0x00, 0x10, 0x00, 0x00, 0x00, 0x10,
                // frame 7
                0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
                0x00, 0x10, 0x00, 0x10, 0x00, 0x00,
            });

            // little endian test
            {
                const bool bigEndian  = false;
                const int  frames     = 7;
                const int  pixelCount = 2 * 3;
                byte[]     packedBits = new byte[(int)(Math.Ceiling(frames * pixelCount / 8.0))];
                // pack the individual frames in no specific order
                OverlayData.TestPack(Subarray(overlayPixels, 2 * 0 * pixelCount, 2 * pixelCount), packedBits, 0 * pixelCount, pixelCount, (ushort)0x00FF, bigEndian);
                OverlayData.TestPack(Subarray(overlayPixels, 2 * 4 * pixelCount, 2 * pixelCount), packedBits, 4 * pixelCount, pixelCount, (ushort)0x00FF, bigEndian);
                OverlayData.TestPack(Subarray(overlayPixels, 2 * 1 * pixelCount, 2 * pixelCount), packedBits, 1 * pixelCount, pixelCount, (ushort)0x00FF, bigEndian);
                OverlayData.TestPack(Subarray(overlayPixels, 2 * 5 * pixelCount, 2 * pixelCount), packedBits, 5 * pixelCount, pixelCount, (ushort)0x00FF, bigEndian);
                OverlayData.TestPack(Subarray(overlayPixels, 2 * 2 * pixelCount, 2 * pixelCount), packedBits, 2 * pixelCount, pixelCount, (ushort)0x00FF, bigEndian);
                OverlayData.TestPack(Subarray(overlayPixels, 2 * 6 * pixelCount, 2 * pixelCount), packedBits, 6 * pixelCount, pixelCount, (ushort)0x00FF, bigEndian);
                OverlayData.TestPack(Subarray(overlayPixels, 2 * 3 * pixelCount, 2 * pixelCount), packedBits, 3 * pixelCount, pixelCount, (ushort)0x00FF, bigEndian);
                var actualResult = FormatBits(packedBits, bigEndian).Substring(0, frames * pixelCount);
                Assert.AreEqual(expectedResult, actualResult, "Error in packed bits for multiframe 8-bit case (little endian)");
            }

            // big endian test
            {
                const bool bigEndian  = true;
                const int  frames     = 7;
                const int  pixelCount = 2 * 3;
                byte[]     packedBits = new byte[(int)(Math.Ceiling(frames * pixelCount / 8.0))];
                // pack the individual frames in no specific order
                OverlayData.TestPack(Subarray(overlayPixels, 2 * 0 * pixelCount, 2 * pixelCount), packedBits, 0 * pixelCount, pixelCount, (ushort)0x00FF, bigEndian);
                OverlayData.TestPack(Subarray(overlayPixels, 2 * 4 * pixelCount, 2 * pixelCount), packedBits, 4 * pixelCount, pixelCount, (ushort)0x00FF, bigEndian);
                OverlayData.TestPack(Subarray(overlayPixels, 2 * 1 * pixelCount, 2 * pixelCount), packedBits, 1 * pixelCount, pixelCount, (ushort)0x00FF, bigEndian);
                OverlayData.TestPack(Subarray(overlayPixels, 2 * 5 * pixelCount, 2 * pixelCount), packedBits, 5 * pixelCount, pixelCount, (ushort)0x00FF, bigEndian);
                OverlayData.TestPack(Subarray(overlayPixels, 2 * 2 * pixelCount, 2 * pixelCount), packedBits, 2 * pixelCount, pixelCount, (ushort)0x00FF, bigEndian);
                OverlayData.TestPack(Subarray(overlayPixels, 2 * 6 * pixelCount, 2 * pixelCount), packedBits, 6 * pixelCount, pixelCount, (ushort)0x00FF, bigEndian);
                OverlayData.TestPack(Subarray(overlayPixels, 2 * 3 * pixelCount, 2 * pixelCount), packedBits, 3 * pixelCount, pixelCount, (ushort)0x00FF, bigEndian);
                var actualResult = FormatBits(packedBits, bigEndian).Substring(0, frames * pixelCount);
                Assert.AreEqual(expectedResult, actualResult, "Error in packed bits for multiframe 8-bit case (big endian)");
            }
        }