Skip to content

Commit d065800

Browse files
committed
LZ78 wpf
1 parent 47c07ff commit d065800

File tree

2 files changed

+42
-10
lines changed

2 files changed

+42
-10
lines changed

AlgorithmsWpf/MainWindow.xaml

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,12 @@
7474
<TextBlock Text="LZ77" HorizontalAlignment="Center"/>
7575
</StackPanel>
7676
</Button>
77+
<Button Name="BLZ78" Margin="7, 9" Click="LZ78ClicButton">
78+
<StackPanel>
79+
<TextBlock Text="Метод сжатия" HorizontalAlignment="Center"/>
80+
<TextBlock Text="LZ78" HorizontalAlignment="Center"/>
81+
</StackPanel>
82+
</Button>
7783
<Button Name="BHamming" Margin="7, 9" Click="HammingClicButton">
7884
<StackPanel>
7985
<TextBlock Text="Код" HorizontalAlignment="Center"/>
@@ -140,12 +146,12 @@
140146
<TextBlock Text="из файла" HorizontalAlignment="Center" />
141147
</StackPanel>
142148
</Button>
143-
<Button Name="BDecodeFromFile" Margin="3" Click="DecodeFromFileClicButton" Grid.Column="4">
149+
<!--<Button Name="BDecodeFromFile" Margin="3" Click="DecodeFromFileClicButton" Grid.Column="4">
144150
<StackPanel>
145151
<TextBlock Text="Декодировать" HorizontalAlignment="Center" />
146152
<TextBlock Text="из файла" HorizontalAlignment="Center" />
147153
</StackPanel>
148-
</Button>
154+
</Button>-->
149155
<Button Name="BClearAll" Margin="3" Click="ClearAllClicButton" Grid.Column="5">
150156
<TextBlock Text="Очистить все" HorizontalAlignment="Center" />
151157
</Button>
@@ -232,12 +238,12 @@
232238
<TextBlock Text="из файла" HorizontalAlignment="Center" />
233239
</StackPanel>
234240
</Button>
235-
<Button Name="B1DecodeFromFile" Margin="3" Click="DecodeFromFileClicButton" Grid.Column="4">
241+
<!--<Button Name="B1DecodeFromFile" Margin="3" Click="DecodeFromFileClicButton" Grid.Column="4">
236242
<StackPanel>
237243
<TextBlock Text="Декодировать" HorizontalAlignment="Center" />
238244
<TextBlock Text="из файла" HorizontalAlignment="Center" />
239245
</StackPanel>
240-
</Button>
246+
</Button>-->
241247
<Button Name="B1ClearAll" Margin="3" Click="ClearAllClicButton" Grid.Column="5">
242248
<TextBlock Text="Очистить все" HorizontalAlignment="Center" />
243249
</Button>
@@ -314,12 +320,12 @@
314320
<TextBlock Text="из файла" HorizontalAlignment="Center" />
315321
</StackPanel>
316322
</Button>
317-
<Button Name="B2DecodeFromFile" Margin="3" Click="DecodeFromFileClicButton" Grid.Column="4">
323+
<!--<Button Name="B2DecodeFromFile" Margin="3" Click="DecodeFromFileClicButton" Grid.Column="4">
318324
<StackPanel>
319325
<TextBlock Text="Декодировать" HorizontalAlignment="Center" />
320326
<TextBlock Text="из файла" HorizontalAlignment="Center" />
321327
</StackPanel>
322-
</Button>
328+
</Button>-->
323329
<Button Name="B2ClearAll" Margin="3" Click="ClearAllClicButton" Grid.Column="5">
324330
<TextBlock Text="Очистить все" HorizontalAlignment="Center" />
325331
</Button>

AlgorithmsWpf/MainWindow.xaml.cs

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public partial class MainWindow : Window
1515
{
1616
List<string> ArrayNameOfAlgorithm = new List<string>() {"Кодирование Хаффмана", "Коды Фано-Шеннона",
1717
"Арифметическое кодирование", "Алгоритм RLE и преобразование Барроуза-Уилера",
18-
"Словарный метод сжатия LZ77", "Код Хемминга", "Линейный код тима (5,2)" };
18+
"Словарный метод сжатия LZ77", "Код Хемминга", "Линейный код тима (5,2)", "Словарный метод сжатия LZ78"};
1919
int IndexOfCurrentAlgorithm = 0;
2020
List<Border> Borders = new List<Border>();
2121
public MainWindow()
@@ -76,6 +76,16 @@ private void LZ77ClicButton(object sender, RoutedEventArgs e)
7676
RLE_LZ77_Border.Visibility = Visibility.Visible;
7777
}
7878

79+
private void LZ78ClicButton(object sender, RoutedEventArgs e)
80+
{
81+
IndexOfCurrentAlgorithm = 7;
82+
foreach (var item in Borders)
83+
item.Visibility = Visibility.Hidden;
84+
NameOfAlgorithm.Text = ArrayNameOfAlgorithm[7];
85+
ClearRLE_LZ77_Border();
86+
RLE_LZ77_Border.Visibility = Visibility.Visible;
87+
}
88+
7989
private void HammingClicButton(object sender, RoutedEventArgs e)
8090
{
8191
IndexOfCurrentAlgorithm = 5;
@@ -164,6 +174,16 @@ private void EncodeClicButton(object sender, RoutedEventArgs e)
164174
break;
165175
case 6:
166176
break;
177+
case 7:
178+
Text1AfterDecoding.Text = string.Empty;
179+
if (Text1ForEncoding.Text.Length == 0) { NoTextForEncoding = true; break; }
180+
181+
var Lz78 = LZ78Algm.Encode(Text1ForEncoding.Text);
182+
foreach (var i in Lz78.GetAnswer())
183+
str += i.ToString();
184+
Encoded1Text.Text = str;
185+
CompressionRatio1.Text = Lz78.GetCompressionRatio().ToString();
186+
break;
167187
}
168188
if (NoTextForEncoding)
169189
{
@@ -222,6 +242,12 @@ private void DecodeClicButton(object sender, RoutedEventArgs e)
222242
break;
223243
case 6:
224244
break;
245+
case 7:
246+
if (Encoded1Text.Text.Length == 0) { NoTextForDecoding = true; break; }
247+
248+
var Lz78 = LZ78Algm.Decode(Encoded1Text.Text);
249+
Text1AfterDecoding.Text = Lz78.GetAnswer();
250+
break;
225251
}
226252
if (NoTextForDecoding)
227253
{
@@ -249,7 +275,7 @@ private void EncodeFromFileClicButton(object sender, RoutedEventArgs e)
249275
using (StreamReader sr = new StreamReader(filename))
250276
TextForEncoding.Text = sr.ReadToEnd();
251277
}
252-
if (new List<int>() { 3, 4 }.Contains(IndexOfCurrentAlgorithm))
278+
if (new List<int>() { 3, 4, 7 }.Contains(IndexOfCurrentAlgorithm))
253279
{
254280
ClearRLE_LZ77_Border();
255281
using (StreamReader sr = new StreamReader(filename))
@@ -277,7 +303,7 @@ private void DecodeFromFileClicButton(object sender, RoutedEventArgs e)
277303
{
278304
string filename = dlg.FileName;
279305

280-
// НУЖНО ОПРЕДЕЛИТЬСЯ С ФОРМАТОМ ВХОДНОГО ФАЙКА ( КАКОЙ РАЗДЕЛИТЕЛЬ МЕЖДУ ДАННЫМИ)
306+
// НУЖНО ОПРЕДЕЛИТЬСЯ С ФОРМАТОМ ВХОДНОГО ФАЙЛА ( КАКОЙ РАЗДЕЛИТЕЛЬ МЕЖДУ ДАННЫМИ)
281307

282308
//if (new List<int>() { 0, 1, 2 }.Contains(IndexOfCurrentAlgorithm))
283309
//{
@@ -305,7 +331,7 @@ private void ClearAllClicButton(object sender, RoutedEventArgs e)
305331
{
306332
if (new List<int>() { 0, 1, 2 }.Contains(IndexOfCurrentAlgorithm))
307333
ClearHuf_Fano_Arith_Border();
308-
if (new List<int>() { 3, 4 }.Contains(IndexOfCurrentAlgorithm))
334+
if (new List<int>() { 3, 4, 7 }.Contains(IndexOfCurrentAlgorithm))
309335
ClearRLE_LZ77_Border();
310336
if (new List<int>() { 5 }.Contains(IndexOfCurrentAlgorithm))
311337
ClearHam_Border();

0 commit comments

Comments
 (0)