Exemple #1
0
        public void RenderColoredGray4(ColoredFrame frame)
        {
            // fall back if firmware doesn't support colored gray 4
            if (!_supportsColoredGray4)
            {
                var rgb24Frame = ColorUtil.ColorizeFrame(DmdWidth, DmdHeight,
                                                         FrameUtil.Join(DmdWidth, DmdHeight, frame.Planes), frame.Palette);
                RenderRgb24(rgb24Frame);
                return;
            }

            // copy palette
            var paletteChanged = false;

            for (var i = 0; i < 16; i++)
            {
                var color = frame.Palette[i];
                var j     = i * 3;
                paletteChanged = paletteChanged || (_frameBufferColoredGray4[j + 1] != color.R || _frameBufferColoredGray4[j + 2] != color.G || _frameBufferColoredGray4[j + 3] != color.B);
                _frameBufferColoredGray4[j + 1] = color.R;
                _frameBufferColoredGray4[j + 2] = color.G;
                _frameBufferColoredGray4[j + 3] = color.B;
            }

            // copy frame
            var frameChanged = FrameUtil.Copy(frame.Planes, _frameBufferColoredGray4, 49);

            // send frame buffer to device
            if (frameChanged || paletteChanged)
            {
                RenderRaw(_frameBufferColoredGray4);
            }
        }
Exemple #2
0
        public void RenderRgb24(byte[] frame)
        {
            // copy data to frame buffer
            var changed = FrameUtil.Copy(frame, _frameBufferRgb24, 1);

            // can directly be sent to the device.
            if (changed)
            {
                RenderRaw(_frameBufferRgb24);
            }
        }
Exemple #3
0
        public void RenderColoredGray4(ColoredFrame frame)
        {
            SetPalette(frame.Palette, frame.PaletteIndex);

            // copy to buffer
            var changed = FrameUtil.Copy(frame.Planes, _frameBufferGray4, 4);

            // send frame buffer to device
            if (changed)
            {
                RenderRaw(_frameBufferGray4);
            }
        }
Exemple #4
0
        public void RenderRgb24(byte[] frame)
        {
            bool changed;

            // can directly be sent to the device.
            _frameBufferRgb24[0] = 3;
            // copy data to frame buffer
            changed = FrameUtil.Copy(frame, _frameBufferRgb24, 1);
            if (changed)
            {
                pDMD.StreamBytes(_frameBufferRgb24, DmdWidth * DmdHeight * 3 + 1);
            }
        }
Exemple #5
0
        public void RenderColoredGray4(byte[][] planes, Color[] palette)
        {
            SetPalette(palette);

            // copy to buffer
            var changed = FrameUtil.Copy(planes, _frameBufferGray4, 4);

            // send frame buffer to device
            if (changed)
            {
                RenderRaw(_frameBufferGray4);
            }
        }
Exemple #6
0
        public void RenderGray2(byte[] frame)
        {
            // split frame into 2-bit planes
            var planes = FrameUtil.Split(DmdWidth, DmdHeight, 2, frame);

            // copy planes into frame buffer
            var changed = FrameUtil.Copy(planes, _frameBuffer, 4);

            // send buffer to device
            if (changed)
            {
                RenderRaw(_frameBuffer);
            }
        }
Exemple #7
0
        public void RenderGray4(byte[] frame)
        {
            // split to sub frames
            var planes = FrameUtil.Split(DmdWidth, DmdHeight, 4, frame);

            // copy to frame buffer
            var changed = FrameUtil.Copy(planes, _frameBufferGray4, 13);

            // send frame buffer to device
            if (changed)
            {
                RenderRaw(_frameBufferGray4);
            }
        }
Exemple #8
0
        public void RenderColoredGray2(byte[][] planes, Color[] palette)
        {
            // update palette
            SetPalette(palette);

            // copy to frame buffer
            var changed = FrameUtil.Copy(planes, _frameBufferGray2, 13);

            // send frame buffer to device
            if (changed)
            {
                RenderRaw(_frameBufferGray2);
            }
        }
Exemple #9
0
        public void RenderColoredGray2(ColoredFrame frame)
        {
            // update palette
            WritePalette(frame.Palette);

            // copy to frame buffer
            var changed = FrameUtil.Copy(frame.Planes, _frameBufferGray2, 13);

            // send frame buffer to device
            if (changed)
            {
                RenderRaw(_frameBufferGray2);
            }
        }
Exemple #10
0
        public void RenderColoredGray6(ColoredFrame frame)
        {
            // copy palette
            var paletteChanged = CopyPalette(frame.Palette, _frameBufferColoredGray6, 64);

            // copy frame
            var frameChanged = FrameUtil.Copy(frame.Planes, _frameBufferColoredGray6, 193);

            // send frame buffer to device
            if (frameChanged || paletteChanged)
            {
                RenderRaw(_frameBufferColoredGray6);
            }
        }
Exemple #11
0
        public void RenderGray2(byte[] frame)
        {
            // split to sub frames
            var planes = FrameUtil.Split(DmdWidth, DmdHeight, 2, frame);

            // copy to frame buffer
            var changed = FrameUtil.Copy(planes, _frameBufferGray2, 13);

            // send frame buffer to device
            if (changed)
            {
                WritePalette(_currentPalette);
                RenderRaw(_frameBufferGray2);
            }
        }
Exemple #12
0
        public void RenderColoredGray4(ColoredFrame frame)
        {
            if (frame.Planes.Length == 0)
            {
                return;
            }
            const int numColors     = 16;
            const int bytesPerColor = 3;
            var       dataLength    = bytesPerColor * numColors + frame.Planes[0].Length * frame.Planes.Length;

            EmitTimestampedData("coloredgray4", dataLength, (data, offset) => {
                Buffer.BlockCopy(ColorUtil.ToByteArray(frame.Palette), 0, data, offset, bytesPerColor * numColors);
                FrameUtil.Copy(frame.Planes, data, offset + bytesPerColor * numColors);
            });
        }
Exemple #13
0
        public void RenderColoredGray2(byte[][] planes, Color[] palette)
        {
            if (planes.Length == 0)
            {
                return;
            }
            const int numColors     = 4;
            const int bytesPerColor = 3;
            var       dataLength    = bytesPerColor * numColors + planes[0].Length * planes.Length;

            EmitTimestampedData("coloredgray2", dataLength, (data, offset) => {
                Buffer.BlockCopy(ColorUtil.ToByteArray(palette), 0, data, offset, bytesPerColor * numColors);
                FrameUtil.Copy(planes, data, offset + bytesPerColor * numColors);
            });
        }
Exemple #14
0
        public void RenderRgb24(byte[] frameRgb24)
        {
            // convert rgb24 to rgb565
            var frame565 = ImageUtil.ConvertToRgb565(DmdWidth, DmdHeight, frameRgb24);

            // split into planes to send over the wire
            var newFrame = new byte[DmdHeight * DmdWidth * 3 / 2];

            FrameUtil.SplitIntoRgbPlanes(frame565, DmdWidth, 16, newFrame, ColorMatrix);

            // copy to frame buffer
            var changed = FrameUtil.Copy(newFrame, _frameBuffer, 1);

            // send to device if changed
            if (changed)
            {
                RenderRaw(_frameBuffer);
            }
        }
Exemple #15
0
 public void RenderGray4(byte[] frame)
 {
     EmitTimestampedData("gray4planes", frame.Length / 2, (data, offset) => FrameUtil.Copy(FrameUtil.Split(_width, _height, 4, frame), data, offset));
 }