private void ChooseCompressor( out ICompressor compressor, out string extension ) { if ( CompressionScheme == Properties.Resources.HuffmanCode ) { compressor = new HuffmanCompressor( ); extension = Properties.Resources.HuffmanCodeExt; } else if ( CompressionScheme == Properties.Resources.Lz77 ) { compressor = new LZ77HuffmanCompressor( DefaultWidth ); extension = Properties.Resources.Lz77Ext; } else if ( CompressionScheme == Properties.Resources.ArithmeticCode ) { compressor = new ArithmeticCodingCompressor( ); extension = Properties.Resources.ArithmeticCodeExt; } else { extension = null; compressor = null; } }
public async void Decompress( ) { var openFileDialog = new OpenFileDialog { Filter = $"Quantized huffman-encoded file|*.{Properties.Resources.HuffmanCodeExt}|" + $"Quantized LZ77-encoded file|*.{Properties.Resources.Lz77Ext}|" + $"Quantized arithmetic-encoded file|*.{Properties.Resources.ArithmeticCodeExt}", ValidateNames = true }; if ( openFileDialog.ShowDialog( ) != true ) return; try { using ( var input = new FileInputStream( openFileDialog.FileName ) ) { var dialog = new SaveFileDialog { DefaultExt = "csv", Filter = "Text file|*.csv", AddExtension = true }; if ( dialog.ShowDialog( ) != true ) return; var path = dialog.FileName; var ext = Path.GetExtension( openFileDialog.FileName ); ICompressor compressor; if ( ext == Properties.Resources.ArithmeticCodeExt ) { compressor = new ArithmeticCodingCompressor( ); } else if ( ext == Properties.Resources.Lz77Ext ) { compressor = new LZ77HuffmanCompressor( DefaultWidth ); } else { compressor = new HuffmanCompressor( ); } var grid = await Task<IGrid>.Factory.StartNew( ( ) => compressor.Decompress( input ) ); var writer = new CsvGridWriter( ';' ); await Task.Factory.StartNew( ( ) => writer.Write( path, grid ) ); MessageBox.Show( "Done.", "Info", MessageBoxButton.OK, MessageBoxImage.Information ); } } catch ( Exception e ) { MessageBox.Show( e.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error ); } }