Пример #1
0
		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;
			}
		}
Пример #2
0
		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 );
			}
		}