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