/// <summary> /// Paveikslėlio apdorojimas /// </summary> /// <param name="r"></param> /// <param name="m"></param> /// <param name="q"></param> /// <param name="matrix"></param> /// <param name="expectedLength"></param> /// <returns></returns> private static async Task HandlePicture(int r, int m, double q, Matrix matrix, int expectedLength) { Console.WriteLine("Select available photos. 0 - bird, 1 - fire, 2 - robot"); var selectedPhoto = Console.ReadLine(); AvailablePhoto photo; while (!Enum.TryParse(selectedPhoto, out photo) || !Enum.IsDefined(typeof(AvailablePhoto), photo)) { Console.WriteLine($"'{selectedPhoto}' is not a valid input. Please enter number between 0 and 2."); selectedPhoto = Console.ReadLine(); } var basePath = Path.Combine(Environment.CurrentDirectory, "Resources"); var filepath = Path.Combine(basePath, $"{photo}.bmp"); if (!File.Exists(filepath)) { Console.WriteLine("File does not exist."); return; } // Paveikslėlio skaitymas ir konvertavimas į baitų masyvą. var(pictureHeader, pictureBody) = await PictureHelper.ReadBmpImageAsync(filepath); var(initialVectors, addedBits) = ConversionService.ConvertByteArrayToVectors(pictureBody, expectedLength); // Vektorių kodavimas var encodedVectors = new List <int[]>(); initialVectors.ForEach(x => encodedVectors.Add(Encoder.EncodeVector(x, matrix))); // Siuntimas kanalu var distortedVectors = new List <int[]>(); var distortedPlainVectors = new List <int[]>(); encodedVectors.SkipLast(1).ToList().ForEach(x => distortedVectors.Add(Channel.Send(x, q))); distortedVectors.Add(Channel.Send(encodedVectors.Last(), q, addedBits)); initialVectors.ForEach(x => distortedPlainVectors.Add(Channel.Send(x, q))); // Vektorių dekodavimas var decodedVectors = new List <int[]>(); distortedVectors.ForEach(x => decodedVectors.Add(Decoder.DecodeVector(x, matrix, m, r))); var decodedByteArr = ConversionService.ConvertVectorsToByteArray(decodedVectors, addedBits); var plainByteArr = ConversionService.ConvertVectorsToByteArray(distortedPlainVectors, addedBits); // Paveikslėlių išsaugojimas. var task1 = PictureHelper.WriteBmpImageAsync(basePath, pictureHeader, decodedByteArr); var task2 = PictureHelper.WriteBmpImageAsync(basePath, pictureHeader, plainByteArr, false); Task.WaitAll(task1, task2); filepath = Path.GetFullPath(basePath); System.Diagnostics.Process.Start("explorer.exe", filepath); }
/// <summary> /// Teksto apdorojimas /// </summary> /// <param name="r"></param> /// <param name="m"></param> /// <param name="q"></param> /// <param name="matrix"></param> /// <param name="expectedLength"></param> private static void HandleText(int r, int m, double q, Matrix matrix, int expectedLength) { Console.WriteLine("Please enter your text"); var text = Console.ReadLine(); Console.WriteLine("Initial text: ".PadRight(20) + text); // Teksto konvertavimas į baitų masyvą. var byteArray = Encoding.GetBytes(text); var(initialVectors, addedBits) = ConversionService.ConvertByteArrayToVectors(byteArray, expectedLength); // Vektorių kodavimas var encodedVectors = new List <int[]>(); initialVectors.ForEach(x => encodedVectors.Add(Encoder.EncodeVector(x, matrix))); // Siuntimas kanalu var distortedVectors = new List <int[]>(); var distortedPlainVectors = new List <int[]>(); encodedVectors.SkipLast(1).ToList().ForEach(x => distortedVectors.Add(Channel.Send(x, q))); distortedVectors.Add(Channel.Send(encodedVectors.Last(), q, addedBits)); initialVectors.ForEach(x => distortedPlainVectors.Add(Channel.Send(x, q))); // Vektorių dekodavimas var decodedVectors = new List <int[]>(); distortedVectors.ForEach(x => decodedVectors.Add(Decoder.DecodeVector(x, matrix, m, r))); var decodedText = Encoding.GetString(ConversionService.ConvertVectorsToByteArray(decodedVectors, addedBits)); var decodedTextWithoutEncoding = Encoding.GetString(ConversionService.ConvertVectorsToByteArray(distortedPlainVectors, addedBits)); // Replacing carriage return and new line char. decodedText = decodedText.Replace('\r', 'r'); decodedText = decodedText.Replace('\n', 'n'); decodedTextWithoutEncoding = decodedTextWithoutEncoding.Replace('\r', 'r'); decodedTextWithoutEncoding = decodedTextWithoutEncoding.Replace('\n', 'n'); Console.WriteLine("Without encoding: ".PadRight(20) + decodedTextWithoutEncoding); Console.WriteLine("Decoded text: ".PadRight(20) + decodedText); }