コード例 #1
0
        public void TestCoding32AlphabetAnd96TextLength()
        {
            var source  = "АбвгдеёйжзийклмнопрстуфхчшщьъэюяАбвгдеёйжзийклмнопрстуфхчшщьъэюяАбвгдеёйжзийклмнопрстуфхчшщьъэюя";
            var encoded = ArithmeticCoding.Encode(source);
            var decoded = ArithmeticCoding.Decode(encoded);

            Assert.AreEqual(source, decoded);
        }
コード例 #2
0
        public void TestCoding20AlphabetAbd20TextLength()
        {
            var source  = "абвгдеёжзийклмнопрст";
            var encoded = ArithmeticCoding.Encode(source);
            var decoded = ArithmeticCoding.Decode(encoded);

            Assert.AreEqual(source, decoded);
        }
コード例 #3
0
        public void TestCoding1AlphabetAnd20TextLength()
        {
            var source  = "cccccccccccccccccccc";
            var encoded = ArithmeticCoding.Encode(source);
            var decoded = ArithmeticCoding.Decode(encoded);

            Assert.AreEqual(source, decoded);
        }
コード例 #4
0
        public void TestCoding64AlphabetAnd128TextLength()
        {
            var source = "абвгдеёжзийклмнопрстуфхчшщъьэюяABCDEFGHIJKLMNOPQRSTUVWXYZ123456" +
                         "абвгдеёжзийклмнопрстуфхчшщъьэюяABCDEFGHIJKLMNOPQRSTUVWXYZ123456";
            var encoded = ArithmeticCoding.Encode(source);
            var decoded = ArithmeticCoding.Decode(encoded);

            Assert.AreEqual(source, decoded);
        }
コード例 #5
0
        public void TestEncodeWriteAndReadDecode()
        {
            const string source   = "abcdefghklmopqastuvwxyz";
            const string fileName = "test1.acode";

            var fullPath = Path.Combine(GetTestFolder(), fileName);
            var encoded  = ArithmeticCoding.Encode(source);

            ArithmeticFile.Write(fullPath, encoded);
            var read    = ArithmeticFile.Read(fullPath);
            var decoded = ArithmeticCoding.Decode(read);

            Assert.AreEqual(source, decoded);
        }
コード例 #6
0
        private void Decode(object sender, RoutedEventArgs e)
        {
            Interval interval   = new Interval(0, 1);
            decimal  message    = decimal.Parse(messageToDecodeTextBox.Text);
            string   outMessage = "";

            TextBox[] probablities = new TextBox[itemsNumber];
            char[]    letters      = new char[itemsNumber];
            for (int i = 0; i < itemsNumber; i++)
            {
                probablities[i] = alphabet[i, 1];
            }
            decimal[] probs = parseProbabilities(probablities);
            probs = ArithmeticCoding.MakeProportions(probs);
            for (int i = 0; i < probablities.Length; i++)
            {
                Interval[] intervals = ArithmeticCoding.MakeSubintervals(interval, probs);
                for (int j = 0; j < intervals.Length; j++)
                {
                    if ((message > intervals[j].l) && (message < intervals[j].r))
                    {
                        outMessage += alphabet[j, 0].Text.ToString();
                        if (((intervals[j].l + intervals[j].r) / 2) == message)
                        {
                            i = intervals.Length;
                        }
                        else
                        {
                            interval = new Interval(intervals[j].l, intervals[j].r);
                        }
                    }
                    if (((intervals[j].l + intervals[j].r) / 2) == message)
                    {
                        j = intervals.Length;
                    }
                }
            }

            resultDecodingTextBlock.Text         = outMessage;
            resultDeCodingGrid.Visibility        = Visibility.Visible;
            resultDeCodingGrid.Opacity           = 0;
            resultDeCodingGrid.OpacityTransition = new ScalarTransition()
            {
                Duration = new TimeSpan(0, 0, 0, 0, 500)
            };
            resultDeCodingGrid.Opacity = 1;
        }
コード例 #7
0
        public void TestCoding256AlphabetAnd1024TextLength()
        {
            var sb = new StringBuilder(1024);

            for (int i = 0; i < 256; i++)
            {
                sb.Append((char)i);
            }

            var s = sb.ToString();

            sb.Append(s);
            sb.Append(s);
            sb.Append(s);

            var source  = sb.ToString();
            var encoded = ArithmeticCoding.Encode(source);
            var decoded = ArithmeticCoding.Decode(encoded);

            Assert.AreEqual(source, decoded);
        }
コード例 #8
0
        private void BtnSaveCode_Click(object sender, EventArgs e)
        {
            if (RtbSource.TextLength == 0)
            {
                return;
            }
            if (_sdfEncoded.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            try
            {
                var encoded = ArithmeticCoding.Encode(RtbSource.Text);
                ArithmeticFile.Write(_sdfEncoded.FileName, encoded);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
コード例 #9
0
ファイル: Program.cs プロジェクト: gamelt/Arithmetic-coding
 private static void Decompress(string inputFile, string outputFile)
 {
     ArithmeticCoding.Decompress(inputFile, outputFile);
 }
コード例 #10
0
        private async void Calculate(object sender, RoutedEventArgs e)
        {
            try
            {
                char[]    message      = messageTextBox.Text.ToCharArray();
                Interval  interval     = new Interval();
                TextBox[] probablities = new TextBox[itemsNumber];
                char[]    letters      = new char[itemsNumber];
                for (int i = 0; i < itemsNumber; i++)
                {
                    probablities[i] = alphabet[i, 1];
                    var characters = alphabet[i, 0].Text.ToCharArray();
                    letters[i] = characters[0];
                }
                bool isMessageInAlphabet = false;
                for (int i = 0; i < message.Length; i++)
                {
                    isMessageInAlphabet = checkLetterInAlphabet(message[i], letters);
                    if (!isMessageInAlphabet)
                    {
                        break;
                    }
                }
                if (!isMessageInAlphabet)
                {
                    ContentDialog dialog = new ContentDialog {
                        Title = "Error", Content = "Wiadomość niepoprawna", CloseButtonText = "ok"
                    };
                    ContentDialogResult result = await dialog.ShowAsync();

                    return;
                }


                try
                {
                    subIntervalsGrid.Children.Clear();
                    checkProbability(probablities);
                    decimal[] probs = parseProbabilities(probablities);
                    probs = ArithmeticCoding.MakeProportions(probs);
                    for (int p = 0; p < message.GetLength(0); p++)
                    {
                        Interval[] intervals = ArithmeticCoding.MakeSubintervals(interval, probs);
                        addSubinterval(intervals, message[p], letters);
                        interval = ArithmeticCoding.SetCurrentInterval(intervals, letters, message[p]);
                    }
                    resultCodingGrid.Visibility        = Visibility.Visible;
                    resultCodingGrid.Opacity           = 0;
                    resultCodingGrid.OpacityTransition = new ScalarTransition()
                    {
                        Duration = new TimeSpan(0, 0, 0, 0, 500)
                    };
                    resultCodingGrid.Opacity           = 1;
                    resultCodingTextBlock.Text         = "Wynik: " + ((interval.l + interval.r) / 2).ToString();
                    subIntervalsGrid.Visibility        = Visibility.Visible;
                    subIntervalsGrid.Opacity           = 0;
                    subIntervalsGrid.OpacityTransition = new ScalarTransition()
                    {
                        Duration = new TimeSpan(0, 0, 0, 0, 500)
                    };
                    subIntervalsGrid.Opacity = 1;
                }
                catch (Exception ex)
                {
                    ContentDialog dialog = new ContentDialog {
                        Title = "Error", Content = ex.Message, CloseButtonText = "ok"
                    };
                    ContentDialogResult result = await dialog.ShowAsync();
                }
            }
            catch (Exception ex)
            {
                ContentDialog dialog = new ContentDialog {
                    Title = "Error", Content = ex.Message, CloseButtonText = "ok"
                };
                ContentDialogResult result = await dialog.ShowAsync();
            }
        }