예제 #1
0
        private void WriteFile(string path)
        {
            //System.Windows.Forms.MessageBox.Show(path);
            string[] formattedData = new string[MatrixFrame.Height];

            /*
             * for (int i = 0; i < MatrixFrame.Height; i++)
             * {
             *  for(int e = 0; e < MatrixFrame.Width; e++)
             *  {
             *      formattedData[i] += "0x" + Convert.ToString(MatrixFrame.Frame[i * MatrixFrame.Width + e].R, 16) + ",";
             *      formattedData[i] += "0x" + Convert.ToString(MatrixFrame.Frame[i * MatrixFrame.Width + e].G, 16) + ",";
             *      formattedData[i] += "0x" + Convert.ToString(MatrixFrame.Frame[i * MatrixFrame.Width + e].B, 16) + ", ";
             *  }
             *  formattedData[i] += "\n";
             * }
             *
             *          for (int i = 0; i < MatrixFrame.Height; i++)
             * {
             *  for (int e = 0; e < MatrixFrame.Width; e++)
             *  {
             *      formattedData[i] += "B" + Convert.ToString(MatrixFrame.Frame[i * MatrixFrame.Width + e].R, 2) + ",";
             *      formattedData[i] += "B" + Convert.ToString(MatrixFrame.Frame[i * MatrixFrame.Width + e].G, 2) + ",";
             *      formattedData[i] += "B" + Convert.ToString(MatrixFrame.Frame[i * MatrixFrame.Width + e].B, 2) + ", ";
             *  }
             *  formattedData[i] += "\n";
             * }
             */

            string[] d = { BitConverter.ToString(MatrixFrame.GetOrderedSerialFrame()) };

            for (int i = 0; i < MatrixFrame.Height; i++)
            {
                for (int e = 0; e < MatrixFrame.Width; e++)
                {
                    formattedData[i] += "0x" + MatrixFrame.Frame[i * MatrixFrame.Width + e].R.ToString("X2") + ",";
                    formattedData[i] += "0x" + MatrixFrame.Frame[i * MatrixFrame.Width + e].G.ToString("X2") + ",";
                    formattedData[i] += "0x" + MatrixFrame.Frame[i * MatrixFrame.Width + e].B.ToString("X2") + ",";
                }
                formattedData[i] += "\n";
            }



            System.IO.File.WriteAllLines(path, formattedData);
        }
예제 #2
0
        public static bool PushFrame()
        {
            if (_serialReady)
            {
                _serialReady = false;
                byte[] orderedFrame = MatrixFrame.GetOrderedSerialFrame();

                if (ColorMode == CMode.BPP24RGB)
                {
                    try
                    {
                        byte[] header = { 0x41 };
                        _sp.BaseStream.Write(header, 0, 1);
                        _sp.BaseStream.WriteAsync(orderedFrame, 0, orderedFrame.Length);
                        return(true);
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show(e.Message);
                        return(false);
                    }
                }
                else if (ColorMode == CMode.BPP16RGB)
                {
                    try
                    {
                        byte[] header          = { 0x42 };
                        byte[] newOrderedFrame = new byte[MatrixFrame.Width * MatrixFrame.Height * 2];
                        for (int i = 0; i < MatrixFrame.Width * MatrixFrame.Height; i++)
                        {
                            byte r = (byte)(orderedFrame[i * 3] & 0xF8);
                            byte g = (byte)(orderedFrame[(i * 3) + 1] & 0xFC);
                            byte b = (byte)(orderedFrame[(i * 3) + 2] & 0xF8);

                            newOrderedFrame[i * 2]       = (byte)(r | (g >> 5));
                            newOrderedFrame[(i * 2) + 1] = (byte)((g << 3) | (b >> 3));
                        }
                        _sp.BaseStream.Write(header, 0, 1);
                        _sp.BaseStream.WriteAsync(newOrderedFrame, 0, newOrderedFrame.Length);
                        return(true);
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show(e.Message);
                        return(false);
                    }
                }
                else if (ColorMode == CMode.BPP8RGB)
                {
                    try
                    {
                        byte[] header          = { 0x43 };
                        byte[] newOrderedFrame = new byte[MatrixFrame.Width * MatrixFrame.Height];
                        for (int i = 0; i < MatrixFrame.Width * MatrixFrame.Height; i++)
                        {
                            byte r = (byte)(orderedFrame[i * 3] & 0xE0);
                            byte g = (byte)(orderedFrame[(i * 3) + 1] & 0xE0);
                            byte b = (byte)(orderedFrame[(i * 3) + 2] & 0xC0);

                            newOrderedFrame[i] = (byte)(r | (g >> 3) | (b >> 6));
                        }
                        _sp.BaseStream.Write(header, 0, 1);
                        _sp.BaseStream.WriteAsync(newOrderedFrame, 0, newOrderedFrame.Length);
                        return(true);
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show(e.Message);
                        return(false);
                    }
                }
                else if (ColorMode == CMode.BPP8Gray)
                {
                    try
                    {
                        byte[] header          = { 0x44 };
                        byte[] newOrderedFrame = new byte[MatrixFrame.Width * MatrixFrame.Height];
                        for (int i = 0; i < MatrixFrame.Width * MatrixFrame.Height; i++)
                        {
                            newOrderedFrame[i] = (byte)((orderedFrame[i * 3] + orderedFrame[(i * 3) + 1] + orderedFrame[(i * 3) + 2]) / 3);
                        }
                        _sp.BaseStream.Write(header, 0, 1);
                        _sp.BaseStream.WriteAsync(newOrderedFrame, 0, newOrderedFrame.Length);
                        return(true);
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show(e.Message);
                        return(false);
                    }
                }
                else if (ColorMode == CMode.BPP1Mono)
                {
                    try
                    {
                        byte[] header = { 0x45 };
                        int    newOrderedFrameLength = ((MatrixFrame.Width * MatrixFrame.Height) / 8) + ((MatrixFrame.Width + MatrixFrame.Height) % 8);
                        byte[] newOrderedFrame       = new byte[newOrderedFrameLength];
                        for (int i = 0; i < MatrixFrame.Width * MatrixFrame.Height;)
                        {
                            newOrderedFrame[i / 8] |= (byte)(((orderedFrame[i * 3] + orderedFrame[(i * 3) + 1] + orderedFrame[(i * 3) + 2]) / 3) > 127 ? 0x80 : 0);
                            i++;
                            newOrderedFrame[i / 8] |= (byte)(((orderedFrame[i * 3] + orderedFrame[(i * 3) + 1] + orderedFrame[(i * 3) + 2]) / 3) > 127 ? 0x40 : 0);
                            i++;
                            newOrderedFrame[i / 8] |= (byte)(((orderedFrame[i * 3] + orderedFrame[(i * 3) + 1] + orderedFrame[(i * 3) + 2]) / 3) > 127 ? 0x20 : 0);
                            i++;
                            newOrderedFrame[i / 8] |= (byte)(((orderedFrame[i * 3] + orderedFrame[(i * 3) + 1] + orderedFrame[(i * 3) + 2]) / 3) > 127 ? 0x10 : 0);
                            i++;
                            newOrderedFrame[i / 8] |= (byte)(((orderedFrame[i * 3] + orderedFrame[(i * 3) + 1] + orderedFrame[(i * 3) + 2]) / 3) > 127 ? 0x08 : 0);
                            i++;
                            newOrderedFrame[i / 8] |= (byte)(((orderedFrame[i * 3] + orderedFrame[(i * 3) + 1] + orderedFrame[(i * 3) + 2]) / 3) > 127 ? 0x04 : 0);
                            i++;
                            newOrderedFrame[i / 8] |= (byte)(((orderedFrame[i * 3] + orderedFrame[(i * 3) + 1] + orderedFrame[(i * 3) + 2]) / 3) > 127 ? 0x02 : 0);
                            i++;
                            newOrderedFrame[i / 8] |= (byte)(((orderedFrame[i * 3] + orderedFrame[(i * 3) + 1] + orderedFrame[(i * 3) + 2]) / 3) > 127 ? 1 : 0);
                            i++;
                        }
                        _sp.BaseStream.Write(header, 0, 1);
                        _sp.BaseStream.WriteAsync(newOrderedFrame, 0, newOrderedFrame.Length);
                        return(true);
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show(e.Message);
                        return(false);
                    }
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }