Skip to content

Commit 7aea4dc

Browse files
committed
wpf encode button, decode button
1 parent 11a27c6 commit 7aea4dc

3 files changed

Lines changed: 108 additions & 25 deletions

File tree

AlgorithmsLibrary/ArithmeticCodingAlgm/ArithmeticCodingAlgm.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,8 @@ public static IAlgmEncoded<string> Decode(Dictionary<char, int> frequencies, str
9696
List<Symbol> codes = GetSymbolsRanges(frequencies, CountOfAllSymbols);
9797
StringBuilder decoded = new StringBuilder(string.Empty);
9898

99-
decimal code = int.Parse(encoded) / (decimal)Math.Pow(10, encoded.Length);
99+
//decimal code = int.Parse(encoded) / (decimal)Math.Pow(10, encoded.Length);
100+
decimal code = Convert.ToDecimal("0,"+encoded);
100101
decimal HighRange = 1, LowRange = 0, h, l;
101102
for (int i = 0; i < CountOfAllSymbols; i++)
102103
{

AlgorithmsWpf/MainWindow.xaml

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,43 +43,43 @@
4343

4444
<!--Блок с кнопками-->
4545
<StackPanel Grid.Column="1" Grid.Row="1" Grid.RowSpan="3" VerticalAlignment="Center">
46-
<Button Name="BHuffman" Margin="7, 3" Click="HuffmanClicButton">
46+
<Button Name="BHuffman" Margin="7, 9" Click="HuffmanClicButton">
4747
<StackPanel>
4848
<TextBlock Text="Кодирование" HorizontalAlignment="Center"/>
49-
<TextBlock Text="Хаффман" HorizontalAlignment="Center"/>
49+
<TextBlock Text="Хаффмана" HorizontalAlignment="Center"/>
5050
</StackPanel>
5151
</Button>
52-
<Button Name="BShannonFano" Margin="7, 3" Click="ShannonFanoClicButton">
52+
<Button Name="BShannonFano" Margin="7, 9" Click="ShannonFanoClicButton">
5353
<StackPanel>
5454
<TextBlock Text="Коды" HorizontalAlignment="Center"/>
5555
<TextBlock Text="Фано-Шеннона" HorizontalAlignment="Center"/>
5656
</StackPanel>
5757
</Button>
58-
<Button Name="BArithmeticCoding" Margin="7, 3" Click="ArithmeticCodingClicButton">
58+
<Button Name="BArithmeticCoding" Margin="7, 9" Click="ArithmeticCodingClicButton">
5959
<StackPanel>
6060
<TextBlock Text="Арифметическое" HorizontalAlignment="Center"/>
6161
<TextBlock Text="кодирование" HorizontalAlignment="Center"/>
6262
</StackPanel>
6363
</Button>
64-
<Button Name="BRLE" Margin="7, 3" Click="RLEClicButton">
64+
<Button Name="BRLE" Margin="7, 9" Click="RLEClicButton">
6565
<StackPanel>
6666
<TextBlock Text="Алгоритм" HorizontalAlignment="Center"/>
6767
<TextBlock Text="RLE" HorizontalAlignment="Center"/>
6868
</StackPanel>
6969
</Button>
70-
<Button Name="BLZ77" Margin="7, 3" Click="LZ77ClicButton">
70+
<Button Name="BLZ77" Margin="7, 9" Click="LZ77ClicButton">
7171
<StackPanel>
7272
<TextBlock Text="Метод сжатия" HorizontalAlignment="Center"/>
7373
<TextBlock Text="LZ77" HorizontalAlignment="Center"/>
7474
</StackPanel>
7575
</Button>
76-
<Button Name="BHamming" Margin="7, 3" Click="HammingClicButton">
76+
<Button Name="BHamming" Margin="7, 9" Click="HammingClicButton">
7777
<StackPanel>
7878
<TextBlock Text="Код" HorizontalAlignment="Center"/>
7979
<TextBlock Text="Хэмминга" HorizontalAlignment="Center"/>
8080
</StackPanel>
8181
</Button>
82-
<Button Name="BLinearCodesType52" Margin="7, 3" Click="LinearCodesType52ClicButton">
82+
<Button Name="BLinearCodesType52" Margin="7, 9" Click="LinearCodesType52ClicButton">
8383
<StackPanel>
8484
<TextBlock Text="Линейный код" HorizontalAlignment="Center"/>
8585
<TextBlock Text="типа (5, 2)" HorizontalAlignment="Center"/>
@@ -88,7 +88,7 @@
8888
</StackPanel>
8989

9090
<TextBlock Name="NameOfAlgorithm" Grid.Column="3" Grid.Row="1" FontSize="16"
91-
HorizontalAlignment="Left" VerticalAlignment="Center"/>
91+
HorizontalAlignment="Left" VerticalAlignment="Center" Text="Выберите алгоритм"/>
9292

9393
<Border Name="Huf_Fano_Arith_Border" Grid.Column="3" Grid.Row="3" Visibility="Hidden">
9494
<Grid>
@@ -328,11 +328,11 @@
328328
Grid.Column="1" Grid.Row="4"
329329
Background="{StaticResource ColorOfAccent}" TextWrapping="Wrap"/>
330330
<TextBox Name="Text2AfterDecoding" TextWrapping="Wrap"
331-
Grid.Column="1" Grid.Row="7" BorderThickness="1"
331+
Grid.Column="1" Grid.Row="10" BorderThickness="1"
332332
Background="{StaticResource ColorOfAccent}" BorderBrush="{StaticResource ColorOfLines}"/>
333333
<Border BorderBrush="{StaticResource ColorOfLines}" BorderThickness="1"
334-
Grid.Column="1" Grid.Row="10" >
335-
<TextBlock Name="Encoded2Text" TextWrapping="Wrap" FontSize="12"
334+
Grid.Column="1" Grid.Row="7" >
335+
<TextBox Name="Encoded2Text" TextWrapping="Wrap" FontSize="12"
336336
Background="{StaticResource ColorOfAccent}" />
337337
</Border>
338338
<!--Подписи блоков-->

AlgorithmsWpf/MainWindow.xaml.cs

Lines changed: 94 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using System.Collections.Generic;
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
24
using System.Windows;
35
using System.Windows.Controls;
46
using AlgorithmsLibrary;
@@ -96,47 +98,61 @@ private void LinearCodesType52ClicButton(object sender, RoutedEventArgs e)
9698

9799
private void EncodeClicButton(object sender, RoutedEventArgs e)
98100
{
101+
string str = "";
99102
if (TextForEncoding.Text == "")
100103
{
101104
//MessageWindow
102105
}
103106
switch (IndexOfCurrentAlgorithm)
104107
{
105108
case 0:
109+
TextAfterDecoding.Text = string.Empty;
110+
106111
var Huf = HuffmanAlgm.Encode(TextForEncoding.Text);
107112
EncodedText.Text = Huf.GetAnswer();
108113
foreach (var i in Huf.GetData())
109-
FriqDictionary.Text += i.Key.ToString() + " " + i.Value.ToString()+'\n';
110-
CompressionRatio.Text = HuffmanAlgm.CalculateCompressionRatio(TextForEncoding.Text, EncodedText.Text).ToString();
114+
str += i.Key.ToString() + " " + i.Value.ToString()+'\n';
115+
FriqDictionary.Text = str;
116+
CompressionRatio.Text = Huf.GetCompressionRatio().ToString();
111117
break;
112118
case 1:
119+
TextAfterDecoding.Text = string.Empty;
120+
113121
var Sha = ShannonFanoAlgm.Encode(TextForEncoding.Text);
114122
EncodedText.Text = Sha.GetAnswer();
115123
foreach (var i in Sha.GetData())
116-
FriqDictionary.Text += i.Key.ToString() + " " + i.Value.ToString()+'\n';
117-
CompressionRatio.Text = ShannonFanoAlgm.CalculateCompressionRatio(TextForEncoding.Text, EncodedText.Text).ToString();
124+
str += i.Key.ToString() + " " + i.Value.ToString()+'\n';
125+
FriqDictionary.Text = str;
126+
CompressionRatio.Text = Sha.GetCompressionRatio().ToString();
118127
break;
119128
case 2:
129+
TextAfterDecoding.Text = string.Empty;
130+
120131
var Ari = ArithmeticCodingAlgm.Encode(TextForEncoding.Text);
121132
EncodedText.Text = Ari.GetAnswer();
122133
foreach (var i in Ari.GetData().GetData())
123-
FriqDictionary.Text += i.Key.ToString() + " " + i.Value.ToString()+'\n';
124-
CompressionRatio.Text = ArithmeticCodingAlgm.CalculateCompressionRatio(TextForEncoding.Text, EncodedText.Text).ToString();
134+
str += i.Key.ToString() + " " + i.Value.ToString()+'\n';
135+
FriqDictionary.Text = str;
136+
CompressionRatio.Text = Ari.GetCompressionRatio().ToString();
125137
break;
126138
case 3:
127139
var Rle = RLEAlgm.Encode(Text1ForEncoding.Text);
128140
foreach (var i in Rle.GetAnswer())
129-
Encoded1Text.Text += i.ToString();
130-
CompressionRatio.Text = RLEAlgm.CalculateCompressionRatio(Text1ForEncoding.Text, Encoded1Text.Text).ToString();
141+
str += i.ToString();
142+
Encoded1Text.Text = str;
143+
// отловить ошибку
144+
CompressionRatio1.Text = Rle.GetCompressionRatio().ToString();
131145
break;
132146
case 4:
133147
var Lz = LZ77Algm.Encode(Text1ForEncoding.Text);
134148
foreach (var i in Lz.GetAnswer())
135-
Encoded1Text.Text += i.ToString();
136-
CompressionRatio.Text = LZ77Algm.CalculateCompressionRatio(Text1ForEncoding.Text, Encoded1Text.Text).ToString();
149+
str += i.ToString();
150+
Encoded1Text.Text = str;
151+
// отловить ошибку
152+
CompressionRatio1.Text = Lz.GetCompressionRatio().ToString();
137153
break;
138154
case 5:
139-
var Ham = HammingAlgm.Encode(Text1ForEncoding.Text);
155+
var Ham = HammingAlgm.Encode(Text2ForEncoding.Text);
140156
Encoded2Text.Text = Ham.GetAnswer();
141157
break;
142158
case 6:
@@ -149,11 +165,60 @@ private void DecodeClicButton(object sender, RoutedEventArgs e)
149165

150166
// в зависимости от алгоритма запустить декодировку
151167
// проверка на пустоту полей для исходого текста
168+
if (TextForEncoding.Text == "")
169+
{
170+
//MessageWindow
171+
}
172+
switch (IndexOfCurrentAlgorithm)
173+
{
174+
case 0:
175+
var Huf = HuffmanAlgm.Decode(CreateDictionary(FriqDictionary.Text), EncodedText.Text);
176+
TextAfterDecoding.Text = Huf.GetAnswer();
177+
break;
178+
case 1:
179+
var Sha = ShannonFanoAlgm.Decode(CreateDictionary(FriqDictionary.Text), EncodedText.Text);
180+
TextAfterDecoding.Text = Sha.GetAnswer();
181+
break;
182+
case 2:
183+
var Ari = ArithmeticCodingAlgm.Decode(CreateDictionary(FriqDictionary.Text).ToDictionary(x => x.Key, x=> int.Parse(x.Value)),
184+
EncodedText.Text, TextForEncoding.Text.Length) ;
185+
TextAfterDecoding.Text = Ari.GetAnswer();
186+
break;
187+
case 3:
188+
//var Rle = RLEAlgm.Decode(Encoded1Text.Text);
189+
//Text1AfterDecoding.Text = Rle.GetAnswer();
190+
Text1AfterDecoding.Text = "Пока не готово";
191+
// отловить ошибку
192+
break;
193+
case 4:
194+
//var Lz = LZ77Algm.Decode(Encoded1Text.Text);
195+
//Text1AfterDecoding.Text = Lz.GetAnswer();
196+
Text1AfterDecoding.Text = "Пока не готово";
197+
// отловить ошибку
198+
break;
199+
case 5:
200+
// пока не готово
201+
var Ham = HammingAlgm.Decode(Encoded2Text.Text);
202+
Text2AfterDecoding.Text = Ham.GetAnswer();
203+
break;
204+
case 6:
205+
break;
206+
}
152207
}
153208

154209
private void EncodeFromFileClicButton(object sender, RoutedEventArgs e)
155210
{
156211
// диалоговое окно
212+
213+
Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
214+
dlg.DefaultExt = ".txt";
215+
dlg.Filter = "Files|*.txt";
216+
Nullable<bool> result = dlg.ShowDialog();
217+
if (result == true)
218+
{
219+
string filename = dlg.FileName;
220+
221+
}
157222
}
158223

159224
private void DecodeFromFileClicButton(object sender, RoutedEventArgs e)
@@ -164,6 +229,12 @@ private void DecodeFromFileClicButton(object sender, RoutedEventArgs e)
164229
private void ClearAllClicButton(object sender, RoutedEventArgs e)
165230
{
166231
//в зависимости от алгоритма очистить поля
232+
if (new List<int>() { 0, 1, 2 }.Contains(IndexOfCurrentAlgorithm))
233+
ClearHuf_Fano_Arith_Border();
234+
if (new List<int>() { 3, 4 }.Contains(IndexOfCurrentAlgorithm))
235+
ClearRLE_LZ77_Border();
236+
if (new List<int>() { 5 }.Contains(IndexOfCurrentAlgorithm))
237+
ClearHam_Border();
167238
}
168239

169240
private void EnterDown_Dictionary(object sender, System.Windows.Input.KeyEventArgs e)
@@ -197,5 +268,16 @@ void ClearHam_Border()
197268
Text2AfterDecoding.Text = string.Empty;
198269

199270
}
271+
Dictionary<char, string> CreateDictionary(string str)
272+
{
273+
Dictionary<char, string> dic = new Dictionary<char, string>();
274+
string[] item = str.Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
275+
foreach (var it in item)
276+
{
277+
string[] s = it.Split();
278+
dic.Add(it[0], s[s.Length-1]);
279+
}
280+
return dic;
281+
}
200282
}
201283
}

0 commit comments

Comments
 (0)