/// <summary> /// Begin compressing files /// </summary> public void Start() { if (FilePaths == null || OutputDirectory == String.Empty) { throw new Exception("FilePaths / OutputDirectory not set"); } // loop through our files for (int i = 0; i < FilePaths.Length; i++) { string filePath = FilePaths[i]; try { Compressor.PNGCompressor pngCompressor = compress(filePath); // this stores the compressor that produced the smallest file Compressor.PNGCompressor winningCompressor = pngCompressor; byte[] fileToWrite = pngCompressor.CompressedFile; string outputDirectory = OutputDirectory; // we may be getting a jpg as input, make sure we output png string fileName = Path.GetFileNameWithoutExtension(filePath) + ".png"; // if the compressed file is larger than the original, keep the original (unless told otherwise) if (!OutputIfLarger && Compressor.PNGCompressor.IsPng(pngCompressor.OriginalFile) && pngCompressor.CompressedFile.Length >= pngCompressor.OriginalFile.Length) { fileToWrite = pngCompressor.OriginalFile; // there was no winning compressor winningCompressor = null; } // we're going to output to the same directory, overwriting files if needed if (outputDirectory == null) { outputDirectory = Path.GetDirectoryName(filePath); } // build the file path string outputFilePath = System.IO.Path.Combine(outputDirectory, fileName); // output the file File.WriteAllBytes(outputFilePath, fileToWrite); // fire the success event FileProcessSuccessEventArgs e = new FileProcessSuccessEventArgs(filePath, outputFilePath, i, winningCompressor); OnFileProcessSuccess(e); } catch (Exception e) { // fire the fail event FileProcessFailEventArgs eventArgs = new FileProcessFailEventArgs(filePath, i, e); OnFileProcessFail(eventArgs); } } }
/// <summary> /// Fire the 'FileProcessFail' event /// </summary> /// <param name="e">Event args</param> private void OnFileProcessFail(FileProcessFailEventArgs e) { FileProcessFail(this, e); }
/// <summary> /// Fire the 'FileProcessFail' event /// </summary> /// <param name="e">Event args</param> private void OnFileProcessFail(FileProcessFailEventArgs e) { FileProcessFail(this, e); }