private void btnPrintPreview_Click(object sender, RoutedEventArgs e) { Screen screen = (Screen)cmbxScreenList.SelectedItem; Bitmap bmp = new Bitmap(txtbPreviewPath.Text); Point[] points = GraphicHelper.ComputeTargetPoints(new Size(800, 601), new Size(bmp.Width, bmp.Height), Rotation.DEG_0); Bitmap bmpResized = new Bitmap(800, 601); using (Graphics gr = Graphics.FromImage(bmpResized)) { gr.DrawImage(bmp, points); } grayData = GrayScaleConverter.ConvertToGrayscale(bmpResized, GrayScaleConverter.ConvertionMethod.AverageBT601, 8); grayData = GrayScaleConverter.DitherSierraLight(grayData, 8, bmpResized.Width, bmpResized.Height); grayData = GrayScaleConverter.ReverseGrayScale(grayData, 8); grayData = GrayScaleConverter.CompactArray(grayData, 8); screen.SendImageBuffer(8, grayData); screen.DrawBuffer(); }
private void ScreenWriteBufferGrayScale() { Bitmap bmp = GrayScaleConverter.GrayToBitmap(DisplayedScreenBuffer, ScreenConnection.Screen.Width, ScreenConnection.Screen.Height, DisplayedGrayScaleDepth); this.Dispatcher.Invoke((Action)(() => { imgScreenDispalyed.Source = BitmapToImageSource(bmp); })); }
private void BTN_GenAll_Click(object sender, EventArgs e) { Bitmap bmp = new Bitmap(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, LSTB_Files.SelectedItem.ToString())); int count = 1; if (!Directory.Exists(@".\out\")) { Directory.CreateDirectory(@".\out\"); } foreach (int grayScale in new List <int>() { 2, 4, 8, 16, 32, 64, 128, 256 }) { foreach (GrayScaleConverter.ConvertionMethod convValue in Enum.GetValues(typeof(GrayScaleConverter.ConvertionMethod))) { foreach (GrayScaleConverter.DitheringMethod ditherValue in Enum.GetValues(typeof(GrayScaleConverter.DitheringMethod))) { foreach (bool serpentine in new List <bool>() { false, true }) { byte[] grayData = GrayScaleConverter.FromBitmap(bmp, convValue, ditherValue, serpentine, grayScale); Bitmap grayBmp = GrayScaleConverter.GrayToBitmap(grayData, bmp.Width, bmp.Height, grayScale); string convName = Enum.GetName(typeof(GrayScaleConverter.ConvertionMethod), convValue); string ditherName = Enum.GetName(typeof(GrayScaleConverter.DitheringMethod), ditherValue); string strCount = count.ToString().PadLeft(3, '0'); grayBmp.Save(@".\out\" + LSTB_Files.SelectedItem.ToString() + "-" + strCount + "-" + grayScale + "-" + convName + "-" + ditherName + "-" + (serpentine ? "Serp" : "Regular") + ".png", ImageFormat.Png); count++; } } } } }
private void render() { if (LSTB_Files.SelectedItem == null || String.IsNullOrWhiteSpace(LSTB_Files.SelectedItem.ToString())) { return; } Bitmap bmp = new Bitmap(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, LSTB_Files.SelectedItem.ToString())); int depth = int.Parse(CMBX_GrayScale.SelectedItem.ToString()); GrayScaleConverter.ConvertionMethod method = (GrayScaleConverter.ConvertionMethod)Enum.Parse(typeof(GrayScaleConverter.ConvertionMethod), CMBX_Method.SelectedItem.ToString()); GrayScaleConverter.DitheringMethod dithering = (GrayScaleConverter.DitheringMethod)Enum.Parse(typeof(GrayScaleConverter.DitheringMethod), CMBX_Dithering.SelectedItem.ToString()); bool serpentine = CHKB_Serpentine.Checked; byte[] grayData = GrayScaleConverter.FromBitmap(bmp, method, dithering, serpentine, depth); Bitmap grayBmp = GrayScaleConverter.GrayToBitmap(grayData, bmp.Width, bmp.Height, depth); PCBX_Output.Image = grayBmp; }
private async void BtnEcho_OnClick(object sender, RoutedEventArgs e) { Bitmap bmp = new Bitmap(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "mlp.jpg")); Bitmap newImage = new Bitmap(800, 601); using (Graphics gr = Graphics.FromImage(newImage)) { gr.SmoothingMode = SmoothingMode.HighQuality; gr.InterpolationMode = InterpolationMode.HighQualityBicubic; gr.PixelOffsetMode = PixelOffsetMode.HighQuality; gr.DrawImage(bmp, new Rectangle(0, 0, 800, 601)); gr.Save(); } byte[] grayData = GrayScaleConverter.FromBitmap(newImage, GrayScaleConverter.ConvertionMethod.Desaturation, GrayScaleConverter.DitheringMethod.Atkinson, false, 8); grayData = GrayScaleConverter.ReverseGrayScale(grayData, 8); //await Connector.testImage("", grayData); }
private void loadImage(string path) { //Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "mlp.png") Bitmap bmp = new Bitmap(path); Bitmap bmpResized = new Bitmap(bmp, 800, 601); int depth = 8; GrayScaleConverter.ConvertionMethod method = GrayScaleConverter.ConvertionMethod.DecompositionMax; GrayScaleConverter.DitheringMethod dithering = GrayScaleConverter.DitheringMethod.Atkinson; bool serpentine = false; grayData = GrayScaleConverter.FromBitmap(bmpResized, method, dithering, serpentine, depth); Bitmap grayBmp = GrayScaleConverter.GrayToBitmap(grayData, bmpResized.Width, bmpResized.Height, depth); grayData = GrayScaleConverter.ReverseGrayScale(grayData, depth); imgPreview.Source = bitmapToImageSource(grayBmp); }
public void ProcessRequest(TcpClient client, byte actionId, List <byte> data) { log("Start of processing request"); log("Simulating latency of 10ms"); Thread.Sleep(10); switch (actionId) { // -- 01 : Ping -- case 1: { timeAction("01 : Ping"); log("Server requested Ping"); Write(client, "Pong"); break; } // -- 02 : Echo -- case 2: { timeAction("02 : Echo"); log("Server requested Echo"); Write(client, data.ToArray()); break; } // -- 03 : GetIp -- case 3: { timeAction("03 : GetIp"); log("Server requested IP"); Write(client, Screen.Ip); break; } // -- 04 : GetMac -- case 4: { timeAction("04 : GetMac"); log("Server requested MAC"); Write(client, Screen.Mac); break; } // -- 07 : Diagnostic Screen -- case 7: { timeAction("07 : Diag"); log("Server requested Diag Screen"); // Todo : screen debug draw break; } // -- 08 : Test Debit -- case 8: { timeAction("08 : Throughtput"); log("Server requested Throughtput test"); Write(client, "OK"); break; } // -- 11 : GetId -- case 11: { timeAction("11 : GetId"); log("Server requested ID"); Write(client, Screen.Id); break; } // -- 12 : SetId -- case 12: { timeAction("12 : SetId"); string newId = System.Text.Encoding.ASCII.GetString(data.ToArray()); log("Server defined ID to \"" + newId + "\""); Screen.Id = newId; break; } // -- 13 : ResetId -- case 13: { timeAction("13 : ResetId"); log("Server requested ID reset \"" + Screen.Mac + "\""); Screen.Id = Screen.Mac; break; } // -- 14 : Reboot -- case 14: { timeAction("14 : Reboot"); log("Server requested Reboot"); break; } // -- 15 : Shutdown -- case 15: { timeAction("15 : Shutdown"); log("Server requested Shutdown"); break; } // -- 21 : GetAllRegisters -- case 21: { timeAction("21 : GetAllRegisters"); log("Server requested All Registers"); Write(client, Enumerable.Repeat <byte>(0, 18).ToArray()); break; } // -- 22 : SetAllRegisters (17 bytes) -- case 22: { timeAction("22 : SetAllRegisters"); log("Server requested setting All Registers"); Write(client, Enumerable.Repeat <byte>(0, 18).ToArray()); break; } // -- 23 : GetRegister (1 byte address) -- case 23: { timeAction("23 : GetRegister"); log("Server requested Registers " + data[0].ToString("X")); Write(client, new byte[] { 0 }); break; } // -- 24 : SetRegister (1 byte address, 1 byte value) -- case 24: { timeAction("24 : SetRegister"); log("Server requested setting Registers " + data[0].ToString("X") + " to " + data[1].ToString("X")); Write(client, new byte[] { 0 }); break; } // ==== 3X : Power Function ==== // -- 31 : Get Status -- case 31: { timeAction("31 : Get Status"); log("Server requested power status"); Write(client, new byte[] { 0 }); break; } // -- 32 : Power On -- case 32: { timeAction("32 : Power On"); log("Server requested power on"); break; } // -- 33 : Power Off -- case 33: { timeAction("33 : Power Off"); log("Server requested power Off"); break; } // -- 34 : Toggle Power -- case 34: { timeAction("34 : Toggle Power"); log("Server requested power toggle"); break; } // ==== 4X : Power Adjust ==== // -- 41 : Get VCOM -- case 41: { timeAction("41 : Get VCOM"); log("Server requested VCOM"); Write(client, new byte[] { 0 }); break; } // -- 42 : Set VCOM -- case 42: { timeAction("42 : Set VCOM"); log("Server requested setting VCOM to " + data[0]); break; } // -- 43 : Get VADJ -- case 43: { timeAction("43 : Get VADJ"); log("Server requested VADJ"); Write(client, BitConverter.GetBytes(15000 - (1 - 3) * 250)); break; } // -- 44 : Set VADJ -- case 44: { timeAction("44 : Set VADJ"); log("Server requested setting VADJ to " + BitConverter.ToInt32(data.ToArray(), 0)); break; } // ==== 5X : Temperature function ==== // -- 51 : Get Temperature -- case 51: { timeAction("51 : Get Temperature"); log("Server requested teperature"); Write(client, new byte[] { 0 }); break; } // -- 52 : Get TCOLD -- case 52: { timeAction("52 : Get TCOLD"); log("Server requested TCOLD"); Write(client, BitConverter.GetBytes(-7)); break; } // -- 53 : Set TCOLD -- case 53: { timeAction("53 : Set TCOLD"); log("Server requested setting TCOLD to " + BitConverter.ToInt32(data.ToArray(), 0)); break; } // -- 54 : Get THOT -- case 54: { timeAction("54 : Get THOT"); log("Server requested THOT"); Write(client, BitConverter.GetBytes(42)); break; } // -- 55 : Set THOT -- case 55: { timeAction("55 : Get THOT"); log("Server requested setting TCOLD to " + BitConverter.ToInt32(data.ToArray(), 0)); break; } // ==== 6X : Power Up/Down Sequence & Timing ==== // -- 61 : Get Power Up Sequence -- case 61: { timeAction("61 : Get Power Up Sequence"); log("Server requested Power Up Sequence"); Write(client, new byte[] { 0, 0, 0, 0 }); break; } // -- 62 : Set Power Up Sequence -- case 62: { timeAction("62 : Set Power Up Sequence"); log("Server requested setting Power Up Sequence to " + String.Join(" ", data.Select(item => item.ToString("X2")))); break; } // -- 63 : Get Power Down Sequence -- case 63: { timeAction("63 : Get Power Down Sequence"); log("Server requested Power Down Sequence"); Write(client, new byte[] { 0, 0, 0, 0 }); break; } // -- 64 : Set Power Down Sequence -- case 64: { timeAction("64 : Set Power Down Sequence"); log("Server requested setting Power Down Sequence to " + String.Join(" ", data.Select(item => item.ToString("X2")))); break; } // -- 65 : Get Power Up Timing -- case 65: { timeAction("65 : Get Power Up Timing"); log("Server requested Power Up Timing"); Write(client, new byte[] { 3, 3, 3, 3 }); break; } // -- 66 : Set Power Up Timing -- case 66: { timeAction("66 : Set Power Up Timing"); log("Server requested setting Up Timing to " + String.Join(" ", data.Select(item => item.ToString("X2")))); break; } // -- 67 : Get Power Down Timing -- case 67: { timeAction("67 : Get Power Down Timing"); log("Server requested Power Down Timing"); Write(client, new byte[] { 3, 6, 6, 6, 16 }); break; } // -- 68 : Set Power Down Timing -- case 68: { timeAction("68 : Set Power Down Timing"); log("Server requested setting Down Timing to " + String.Join(" ", data.Select(item => item.ToString("X2")))); break; } // ==== 10X : Test Screens ==== // -- 101 : White -- case 101: { timeAction("101 : Test White"); log("Server requested Test screen White"); ReadyScreenBuffer = Enumerable.Repeat <byte>(0, ReadyScreenBuffer.Length).ToArray(); MigrateBuffer(); ScreenWriteBufferBW(); break; } // -- 102 : Black -- case 102: { timeAction("102 : Test Black"); log("Server requested Test screen Black"); ReadyScreenBuffer = Enumerable.Repeat <byte>(1, ReadyScreenBuffer.Length).ToArray(); MigrateBuffer(); ScreenWriteBufferBW(); break; } // -- 103 : White / Black / White -- case 103: { timeAction("103 : Test White / Black / White"); log("Server requested Test screen Black"); ReadyScreenBuffer = Enumerable.Repeat <byte>(0, ReadyScreenBuffer.Length).ToArray(); MigrateBuffer(); ScreenWriteBufferBW(); ReadyScreenBuffer = Enumerable.Repeat <byte>(1, ReadyScreenBuffer.Length).ToArray(); MigrateBuffer(); ScreenWriteBufferBW(); ReadyScreenBuffer = Enumerable.Repeat <byte>(0, ReadyScreenBuffer.Length).ToArray(); MigrateBuffer(); ScreenWriteBufferBW(); break; } // -- 104 : line -- case 104: { timeAction("104 : Test Ligne"); log("Server requested Test screen Ligne"); int lineSize; if (data.Count == 0) { lineSize = 0; } else { lineSize = data[0]; } if (lineSize == 0) { lineSize = 5; } int offset = 0; ReadyScreenBuffer = Enumerable.Repeat <byte>(0, ReadyScreenBuffer.Length).ToArray(); for (int i = 0; i < ScreenConnection.ScreenBase.Height; i++) { int lineCount = 0; bool lineVal = false; for (int j = 0; j < ScreenConnection.ScreenBase.Width; j++) { ReadyScreenBuffer[offset++] = (byte)(lineVal ? 1 : 0); lineCount++; if (lineCount >= lineSize) { lineCount = 0; lineVal = !lineVal; } } } MigrateBuffer(); ScreenWriteBufferBW(); break; } // -- 105 : Col -- case 105: { timeAction("105 : Test Col"); log("Server requested Test screen Col"); int colSize; if (data.Count == 0) { colSize = 0; } else { colSize = data[0]; } if (colSize == 0) { colSize = 5; } int offset = 0; ReadyScreenBuffer = Enumerable.Repeat <byte>(0, ReadyScreenBuffer.Length).ToArray(); int colCount = 0; bool colVal = false; for (int i = 0; i < ScreenConnection.ScreenBase.Height; i++) { for (int j = 0; j < ScreenConnection.ScreenBase.Width; j++) { ReadyScreenBuffer[offset++] = (byte)(colVal ? 1 : 0); } colCount++; if (colCount >= colSize) { colCount = 0; colVal = !colVal; } } MigrateBuffer(); ScreenWriteBufferBW(); break; } // -- 106 : square -- case 106: { timeAction("106 : Test square"); log("Server requested Test screen square"); int squareSize; if (data.Count == 0) { squareSize = 0; } else { squareSize = data[0]; } if (squareSize == 0) { squareSize = 5; } int offset = 0; ReadyScreenBuffer = Enumerable.Repeat <byte>(0, ReadyScreenBuffer.Length).ToArray(); int colCount = 0; bool colVal = false; for (int i = 0; i < ScreenConnection.ScreenBase.Height; i++) { int lineCount = 0; bool lineVal = false; for (int j = 0; j < ScreenConnection.ScreenBase.Width; j++) { ReadyScreenBuffer[offset++] = (byte)(!lineVal != !colVal ? 1 : 0); lineCount++; if (lineCount >= squareSize) { lineCount = 0; lineVal = !lineVal; } } colCount++; if (colCount >= squareSize) { colCount = 0; colVal = !colVal; } } MigrateBuffer(); ScreenWriteBufferBW(); break; } // -- 107 : rand -- case 107: { timeAction("107 : Test rand"); log("Server requested Test screen rand"); ReadyScreenBuffer = Enumerable.Repeat <byte>(0, ReadyScreenBuffer.Length).ToArray(); Random rnd = new Random(); for (int i = 0; i < ReadyScreenBuffer.Length; i++) { ReadyScreenBuffer[i] = (byte)rnd.Next(0, 2); } MigrateBuffer(); ScreenWriteBufferBW(); break; } // -- 108 : scale -- case 108: { timeAction("108 : Test scale"); log("Server requested Test screen scale"); ReadyScreenBuffer = Enumerable.Repeat <byte>(0, ReadyScreenBuffer.Length).ToArray(); ReadyGrayScaleDepth = 2; int offset = 0; for (int i = 0; i < 300; i++) { for (int j = 0; j < ScreenConnection.ScreenBase.Width; j++) { ReadyScreenBuffer[offset++] = (byte)(j - 21 <= i * 2 && j > 20 ? 1 : 0); } } for (int i = 0; i < 301; i++) { for (int j = 0; j < ScreenConnection.ScreenBase.Width; j++) { ReadyScreenBuffer[offset++] = (byte)(j - 21 <= i * 2 && j > 20 ? 1 : 0); } } MigrateBuffer(); ScreenWriteBufferBW(); break; } // -- 109 : Grayscale Test -- case 109: { timeAction("109 : Test Grayscale"); log("Server requested Test screen Grayscale"); ReadyScreenBuffer = Enumerable.Repeat <byte>(0, ReadyScreenBuffer.Length).ToArray(); if (data.Count == 0) { ReadyGrayScaleDepth = 8; } else { ReadyGrayScaleDepth = data[0]; } int offset = 0; for (int i = 0; i < ScreenConnection.ScreenBase.Height; i++) { int colVal = (i - 2) / (600 / ReadyGrayScaleDepth); for (int j = 0; j < ScreenConnection.ScreenBase.Width; j++) { ReadyScreenBuffer[offset++] = (byte)colVal; } } ScreenWriteBufferGrayScale(); break; } // ==== 15X : Prints ==== // -- 151 : Send Image Buffer -- case 151: { timeAction("151 : Receive Buffer Grayscale"); log("Server uploaded buffer"); this.Dispatcher.Invoke((Action)(() => { ReadyGrayScaleDepth = data[0]; ReadyScreenBuffer = GrayScaleConverter.DecompactArray(data.Skip(1).ToArray(), ReadyGrayScaleDepth, (int)(ScreenBase.Width * ScreenBase.Height)); ScreenWriteBufferReadyGrayScale(); })); break; } // -- 155 : Print Buffer -- case 155: { timeAction("155 : Draw"); log("Server Started draw"); MigrateBuffer(); ScreenWriteBufferGrayScale(); break; } } EndTransmission(client); log("End of processing request"); }
private void button1_Click_1(object sender, EventArgs e) { Stopwatch sw = new Stopwatch(); sw.Start(); Bitmap bmp = new Bitmap(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, LSTB_Files.SelectedItem.ToString())); Bitmap newImage = new Bitmap(800, 600); using (Graphics gr = Graphics.FromImage(newImage)) { gr.SmoothingMode = SmoothingMode.HighQuality; gr.InterpolationMode = InterpolationMode.HighQualityBicubic; gr.PixelOffsetMode = PixelOffsetMode.HighQuality; gr.DrawImage(bmp, new Rectangle(0, 0, 800, 600)); gr.Save(); } GrayScaleConverter.ConvertionMethod method = (GrayScaleConverter.ConvertionMethod)Enum.Parse(typeof(GrayScaleConverter.ConvertionMethod), CMBX_Method.SelectedItem.ToString()); GrayScaleConverter.DitheringMethod dithering = (GrayScaleConverter.DitheringMethod)Enum.Parse(typeof(GrayScaleConverter.DitheringMethod), CMBX_Dithering.SelectedItem.ToString()); sw.Stop(); long phase1ms = sw.ElapsedMilliseconds; List <Tuple <long, long, long> > timing = new List <Tuple <long, long, long> >(); for (int i = 0; i < 10; i++) { sw.Restart(); byte[] grayData = GrayScaleConverter.ConvertToGrayscale(newImage, method, 8); sw.Stop(); long grayms = sw.ElapsedMilliseconds; sw.Restart(); grayData = GrayScaleConverter.DitherSierraLight(grayData, 8, newImage.Width, newImage.Height); sw.Stop(); long diterms = sw.ElapsedMilliseconds; sw.Restart(); byte[] output = new byte[(int)Math.Ceiling(grayData.Length / 2.0)]; int counter = 0; for (int j = 0; j < grayData.Length; j += 2) { output[counter] = (byte)(grayData[j] << 4 | grayData[j + 1]); counter++; } grayData = output; sw.Stop(); long compressms = sw.ElapsedMilliseconds; timing.Add(new Tuple <long, long, long>(grayms, compressms, diterms)); } MessageBox.Show("Phase 1 : " + phase1ms + "ms " + Environment.NewLine + "Phase gray : min : " + timing.Select(item => item.Item1).Min() + "ms | max : " + timing.Select(item => item.Item1).Max() + "ms | avg : " + timing.Select(item => item.Item1).Average() + "ms" + Environment.NewLine + "Phase compress : min : " + timing.Select(item => item.Item2).Min() + "ms | max : " + timing.Select(item => item.Item2).Max() + "ms | avg : " + timing.Select(item => item.Item2).Average() + "ms" + Environment.NewLine + "Phase diter : min : " + timing.Select(item => item.Item3).Min() + "ms | max : " + timing.Select(item => item.Item3).Max() + "ms | avg : " + timing.Select(item => item.Item3).Average() + "ms" ); }