public byte[] DecompressFile(CompressedFile compressedFile) { ICompressor compressor; if (compressedFile.Queue != null) { compressor = new HuffmanCoding(); } else { compressor = new RunLengthEncodingCompressor(); } return(compressor.Decompress(compressedFile)); }
private async void panelFile_DragDrop(object sender, DragEventArgs e) { string[] files = e.Data.GetData(DataFormats.FileDrop, false) as string[]; ICompressor compressor; if (comboBoxAlgorithm.Text.Equals("Huffman")) { compressor = new HuffmanCoding(); } else { compressor = new RunLengthEncodingCompressor(); } var file = File.ReadAllBytes(@files.First()); try { pictureBox.Hide(); panelFile.BackgroundImage = Image.FromFile(@files.First()); } catch { pictureBox.Show(); panelFile.BackgroundImage = null; } var stopWatch = new Stopwatch(); stopWatch.Start(); var task = Task.Run(() => { return(compressor.Compress(file)); }); compressedFile = await Task.Run(() => { var writeStatus = new WriteStatusDelegate(WriteStatus); int i = 0; while (!task.IsCompleted) { if (i == 500) { labelStatus.Invoke(writeStatus, $"Status: {compressor.Percentage.ToString("0.00")} % processado"); } i = (i + 1) % 501; } labelStatus.Invoke(writeStatus, $"Status: 100 % processado"); var f = task.Result; f.Name = Path.GetFileName(files.First()); return(f); }); stopWatch.Stop(); var compressionPercentage = compressedFile.Data.Length * 100M / file.Length; labelTempo.Text = stopWatch.Elapsed.ToString(@"hh\:mm\:ss\.ffff"); labelTamanho.Text = (compressedFile.Data.LongLength / 1024M).ToString("0.000") + " kb"; labelCompressionPercent.Text = $"{compressionPercentage.ToString("0.00")} %"; }