/// <summary>
 /// Reads image in JPEG format and saves to WebP format using memory-friendly Pipeline API
 /// </summary>
 private static void WriteWebPMemoryFriendly()
 {
     using (var reader = new JpegReader("../../../../_Input/Chicago.jpg"))
         using (var writer = new WebPWriter("../../../../_Output/WriteWebPMemoryFriendly.webp"))
         {
             Pipeline.Run(reader + writer);
         }
 }
    /// <summary>
    /// Writes image in WebP lossy and lossless format
    /// </summary>
    private static void WriteWebPLossyAndLossless()
    {
        using (var reader = new JpegReader("../../../../_Input/Chicago.jpg"))
            using (var writerLossy = new WebPWriter("../../../../_Output/WriteWebPLossy.webp"))
                using (var writerLossless = new WebPWriter("../../../../_Output/WriteWebPLossless.webp"))
                {
                    writerLossy.Quality = 85f;
                    Pipeline.Run(reader + writerLossy);

                    writerLossy.FrameOptions.Lossless = true;
                    Pipeline.Run(reader + writerLossless);
                }

        var lossy    = new System.IO.FileInfo("../../../../_Output/WriteWebPLossy.webp");
        var lossless = new System.IO.FileInfo("../../../../_Output/WriteWebPLossless.webp");

        Console.WriteLine("Lossy WebP: {0} b", lossy.Length);
        Console.WriteLine("Lossless WebP: {0} b", lossless.Length);
    }
    /// <summary>
    /// Writes simple animated image in WebP format
    /// </summary>
    private static void WriteAnimatedWebP()
    {
        using (var writer = new WebPWriter("../../../../_Output/WriteAnimatedWebP.webp"))
        {
            writer.FrameOptions.Delay = 250;

            for (int i = 0; i < 400; i += 25)
            {
                var bitmap = new Bitmap(400, 100, PixelFormat.Format24bppRgb, RgbColor.Yellow);

                using (var graphics = bitmap.GetAdvancedGraphics())
                {
                    graphics.FillEllipse(new SolidBrush(RgbColor.Green), new System.Drawing.RectangleF(i, 0, 100, 100));
                }

                Pipeline.Run(bitmap + writer);
            }
        }
    }
    /// <summary>
    /// Compares compression of WebP, JPEG and PNG image formats
    /// </summary>
    private static void CompareImageFormatCompressions()
    {
        using (var reader = new JpegReader("../../../../_Input/Chicago.jpg"))
            using (var writerWebP = new WebPWriter("../../../../_Output/CompareImageFormatCompressions.webp"))
                using (var writerJpeg = new JpegWriter("../../../../_Output/CompareImageFormatCompressions.jpg"))
                    using (var writerPng = new PngWriter("../../../../_Output/CompareImageFormatCompressions.png"))
                    {
                        writerWebP.Quality = 90f;
                        writerJpeg.Quality = 90;

                        Pipeline.Run(reader + writerWebP);
                        Pipeline.Run(reader + writerJpeg);
                        Pipeline.Run(reader + writerPng);
                    }

        var webpFile = new System.IO.FileInfo("../../../../_Output/CompareImageFormatCompressions.webp");
        var jpegFile = new System.IO.FileInfo("../../../../_Output/CompareImageFormatCompressions.jpg");
        var pngFile  = new System.IO.FileInfo("../../../../_Output/CompareImageFormatCompressions.png");

        Console.WriteLine("WebP: {0} b", webpFile.Length);
        Console.WriteLine("JPEG: {0} b", jpegFile.Length);
        Console.WriteLine("PNG: {0} b", pngFile.Length);
    }