public Bitmap Encode(Bitmap inputImage, IInputMessage inputMessage) { Bitmap image = new Bitmap(inputImage); const int lastBit = 0; // index of current bit of inputMessage int bitIndex = 0; string messageWithHeader = inputMessage.GetMessageWithHeader(); int messageLength = messageWithHeader.Length; for (int i = 0; i < image.Height; i++) { for (int j = 0; j < image.Width; j++) { Color pixel = image.GetPixel(j, i); int R = pixel.R; int G = pixel.G; int B = pixel.B; // pass through every channel for (int n = 0; n < 3; n++) { if (bitIndex == messageLength) { Color newPixel = Color.FromArgb(R, G, B); image.SetPixel(j, i, newPixel); return(image); } switch (n) { case 0: { R ^= (-messageWithHeader[bitIndex] ^ R) & (1 << lastBit); bitIndex++; break; } case 1: { G ^= (-messageWithHeader[bitIndex] ^ G) & (1 << lastBit); bitIndex++; break; } case 2: { B ^= (-messageWithHeader[bitIndex] ^ B) & (1 << lastBit); bitIndex++; Color newPixel = Color.FromArgb(R, G, B); image.SetPixel(j, i, newPixel); break; } } } } } return(image); }
public Bitmap Encode(Bitmap inputImage, IInputMessage inputMessage) { Bitmap image = new Bitmap(inputImage); Dictionary <int, int> histogram = calculateHistogram(image); Tuple <int, int, int, int> myTuple = findMinAndMax(histogram); int min = myTuple.Item1; int max = myTuple.Item2; int minIndex = myTuple.Item3; int maxIndex = myTuple.Item4; /* Console.WriteLine("Max value is: " + max + " for index: " + maxIndex); * Console.WriteLine("Min value is: " + min + " for index: " + minIndex);*/ string messageWithHeader = inputMessage.GetMessageWithHeader(); if (maxIndex < minIndex) { shiftHistogramRight(image, minIndex, maxIndex); encodeMessageRight(image, messageWithHeader, minIndex, maxIndex); } else if (maxIndex > minIndex) { shiftHistogramLeft(image, minIndex, maxIndex); encodeMessageLeft(image, messageWithHeader, minIndex, maxIndex); } return(image); }
public TModel Get <TModel>(IInputMessage inputMessage, IInputValidation validation, IInputParser <TModel> parser) where TModel : class { var getMessage = inputMessage.GetMessage(); Console.WriteLine(getMessage); string value = Console.ReadLine(); if (validation.IsValid(value)) { return(parser.Parse(value)); } else { var invalidMessage = inputMessage.InvalidMessage(); Console.WriteLine(inputMessage); } return(default(TModel)); }
private void IInputMessageProcessor(IInputMessage inputMessage) { try { Console.WriteLine("[INFO] ICANSEE.IInputMessage received (" + inputMessage.ControlFunction.ToString() + "): " + JsonConvert.SerializeObject(inputMessage)); List <string> param = inputMessage.Parameters; string result = ""; string errorLog = ""; bool status; switch (inputMessage.ControlFunction) { case ControlFunction.AddCamera: // "0", "1", null, "Default Webcam", "camera" //helper.AddReplaceCameraConfiguration(1, new CameraConfiguration(0, null, "Default Webcam", 1, "camera")); helper.AddReplaceCameraConfiguration(int.Parse(param[1]), new CameraConfiguration(int.Parse(param[0]), param[2], param[3], int.Parse(param[1]), param[4])); break; case ControlFunction.DisplayImageInServerGUI: // firstDevice.ComputeDeviceId, port.ToString() // string result = utility.DisplayImageWindow(firstDevice, port); result = utility.DisplayImageWindow(utility.computeDeviceInfoMap[param[0]], int.Parse(param[1])); if (result == null) { errorLog = "Error occurred @ " + ControlFunction.DisplayImageInServerGUI.ToString(); } break; case ControlFunction.ExecutePresetExtended: // presetId, cameraId, postResultProcessingStatement logger.LogComputeDeviceStateMap(helper.ComputeDeviceStateMap, "Before executing preset: " + param[0] + "," + param[1]); result = helper.ExecutePresetExtended(param[0], helper.QueryCameraDescription(int.Parse(param[1])), utility.ConvertHtmlToSymbols(param[2]).Replace("{{host}}", brokerHubHost).Replace("{{port}}", brokerHubPort)); if (result == null) { errorLog = "Error occurred @ " + ControlFunction.ExecutePreset.ToString(); } break; case ControlFunction.UnloadPresetAndCamera: // presetId { logger.LogComputeDeviceStateMap(helper.ComputeDeviceStateMap, "Before UnloadPresetAndCamera preset: " + param[0]); var preset = utility.QueryPresetById(param[0]); string computeDeviceId = preset.ComputeDeviceId; int port = preset.Port; var computeDeviceInfo = utility.QueryComputeDeviceById(computeDeviceId); if (computeDeviceInfo == null) { status = false; result = FormatBooleanStatus(inputMessage.ControlFunction, status); } else { var cameraDesc = helper.PresetCameraMap[param[0]]; if (cameraDesc == null) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("[WARNING] ICANSEE.cs: IInputMessageProcessor: " + "case ControlFunction.UnloadPresetAndCamera: " + "camera not associated with preset"); Console.ResetColor(); } else { logger.LogComputeDeviceStateMap(helper.ComputeDeviceStateMap, "1 Before UnloadCamera for preset (camera=" + cameraDesc.Id + ", preset=" + param[0] + ")"); status = helper.UnloadCamera(cameraDesc.Id, param[0]); logger.LogComputeDeviceStateMap(helper.ComputeDeviceStateMap, "1 After UnloadCamera for preset (camera=" + cameraDesc.Id + ", preset=" + param[0] + ")"); result = FormatBooleanStatus(inputMessage.ControlFunction, status); } logger.LogComputeDeviceStateMap(helper.ComputeDeviceStateMap, "2 Before UnloadAlgorithm for preset: " + param[0]); status = helper.UnloadAlgorithm(param[0]); logger.LogComputeDeviceStateMap(helper.ComputeDeviceStateMap, "2 After UnloadAlgorithm for preset: " + param[0]); result = FormatBooleanStatus(inputMessage.ControlFunction, status); logger.LogComputeDeviceStateMap(helper.ComputeDeviceStateMap, "3 Before UnloadAlgorithm for preset: " + param[0]); status = helper.UnloadAlgorithm(param[0]); logger.LogComputeDeviceStateMap(helper.ComputeDeviceStateMap, "3 After UnloadAlgorithm for preset: " + param[0]); result = FormatBooleanStatus(inputMessage.ControlFunction, status); logger.LogComputeDeviceStateMap(helper.ComputeDeviceStateMap, "4 Before UnloadPreset: " + param[0] + "," + computeDeviceId + "," + port.ToString()); status = helper.UnloadPreset(param[0], computeDeviceInfo, port); logger.LogComputeDeviceStateMap(helper.ComputeDeviceStateMap, "4 After UnloadPreset (status=" + status.ToString() + "): " + param[0] + "," + computeDeviceId + "," + port.ToString()); result = FormatBooleanStatus(inputMessage.ControlFunction, status); } if (result == null) { errorLog = "Error occurred @ " + ControlFunction.UnloadPresetAndCamera.ToString(); } } break; case ControlFunction.ExecutePreset: // "Preset1", "2" // result = helper.ExecutePreset("Preset1", helper.QueryCameraDescription(2)); logger.LogComputeDeviceStateMap(helper.ComputeDeviceStateMap, "Before executing preset: " + param[0] + "," + param[1]); result = helper.ExecutePreset(param[0], helper.QueryCameraDescription(int.Parse(param[1]))); if (result == null) { errorLog = "Error occurred @ " + ControlFunction.ExecutePreset.ToString(); } break; case ControlFunction.UnloadPreset: // "Preset1", firstDevice.ComputeDeviceId, 5000 if (param.Count == 3) { logger.LogComputeDeviceStateMap(helper.ComputeDeviceStateMap, "Before UnloadPreset: " + param[0] + "," + param[1] + "," + param[2]); status = helper.UnloadPreset(param[0], utility.QueryComputeDeviceById(param[1]), int.Parse(param[2])); logger.LogComputeDeviceStateMap(helper.ComputeDeviceStateMap, "After UnloadPreset (status=" + status.ToString() + "): " + param[0] + "," + param[1] + "," + param[2]); result = FormatBooleanStatus(inputMessage.ControlFunction, status); } // "Preset1" else if (param.Count == 1) { var preset = utility.QueryPresetById(param[0]); string computeDeviceId = preset.ComputeDeviceId; int port = preset.Port; var computeDeviceInfo = utility.QueryComputeDeviceById(computeDeviceId); if (computeDeviceInfo == null) { status = false; result = FormatBooleanStatus(inputMessage.ControlFunction, status); } else { logger.LogComputeDeviceStateMap(helper.ComputeDeviceStateMap, "Before UnloadAlgorithm: " + param[0]); status = helper.UnloadAlgorithm(param[0]); logger.LogComputeDeviceStateMap(helper.ComputeDeviceStateMap, "After UnloadAlgorithm: " + param[0]); result = FormatBooleanStatus(inputMessage.ControlFunction, status); logger.LogComputeDeviceStateMap(helper.ComputeDeviceStateMap, "Before UnloadPreset (param.Count=1): " + param[0] + "," + computeDeviceId + "," + port.ToString()); status = helper.UnloadPreset(param[0], computeDeviceInfo, port); logger.LogComputeDeviceStateMap(helper.ComputeDeviceStateMap, "After UnloadPreset (param.Count=1) (status=" + status.ToString() + "): " + param[0] + "," + computeDeviceId + "," + port.ToString()); result = FormatBooleanStatus(inputMessage.ControlFunction, status); } } break; case ControlFunction.ListAllCameraInUse: List <Tuple <string, string> > cameraInUse = helper.GetAllCameraInUse(); result = JsonConvert.SerializeObject(cameraInUse); break; case ControlFunction.UnloadCamera: // CameraId: 1 logger.LogComputeDeviceStateMap(helper.ComputeDeviceStateMap, "Before UnloadCamera: " + param[0]); status = helper.UnloadCamera(int.Parse(param[0]), param[1]); logger.LogComputeDeviceStateMap(helper.ComputeDeviceStateMap, "After UnloadCamera: " + param[0]); result = FormatBooleanStatus(inputMessage.ControlFunction, status); break; case ControlFunction.UnloadAlgorithm: // "Algo1", firstDevice.ComputeDeviceId, 5000 if (param.Count == 3) { logger.LogComputeDeviceStateMap(helper.ComputeDeviceStateMap, "Before UnloadAlgorithm: " + param[0]); status = helper.UnloadAlgorithm(param[0], utility.QueryComputeDeviceById(param[1]), int.Parse(param[2])); logger.LogComputeDeviceStateMap(helper.ComputeDeviceStateMap, "After UnloadAlgorithm: " + param[0]); result = FormatBooleanStatus(inputMessage.ControlFunction, status); } // Or "Preset1" else if (param.Count == 1) { logger.LogComputeDeviceStateMap(helper.ComputeDeviceStateMap, "Before UnloadAlgorithm: " + param[0]); status = helper.UnloadAlgorithm(param[0]); logger.LogComputeDeviceStateMap(helper.ComputeDeviceStateMap, "After UnloadAlgorithm: " + param[0]); result = FormatBooleanStatus(inputMessage.ControlFunction, status); } break; case ControlFunction.QueryComputeDevice: // Gets Compute Device State Map result = "{\"CurrentState\":\"" + logger._GetShortFormattedStateMap(helper.ComputeDeviceStateMap).Replace("\n", "\\n") + "\"}"; break; case ControlFunction.RunningTasks: // Gets status of running presets and commands to unload result = "<p style=\"font-family: Consolas;\">" + logger._GetShortFormattedStateMap(helper.ComputeDeviceStateMap).Replace("\n", "\\n") + "</p>"; break; } string json = result; string text = result; if (errorLog != "") { text = ", Error: " + errorLog; } InformationMessage outputMessage = new InformationMessage(json, text); Hub.Publish <InformationMessage>(outputMessage); } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("[ERROR] ICANSEE.cs: IInputMessageProcessor: " + ex.Message); if (ex.InnerException != null) { Console.WriteLine(" ICANSEE.cs: IInputMessageProcessor: (InnerException) " + ex.InnerException.Message); } Console.ResetColor(); } }