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); }
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); } }