Exemple #1
0
        public void CompressIntPtr(
            [Values
                 (TJSubsamplingOptions.TJSAMP_GRAY,
                 TJSubsamplingOptions.TJSAMP_411,
                 TJSubsamplingOptions.TJSAMP_420,
                 TJSubsamplingOptions.TJSAMP_440,
                 TJSubsamplingOptions.TJSAMP_422,
                 TJSubsamplingOptions.TJSAMP_444)] TJSubsamplingOptions options,
            [Values(1, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100)] int quality)
        {
            foreach (var bitmap in TestUtils.GetTestImages("*.bmp"))
            {
                BitmapData data = null;
                try
                {
                    data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly,
                                           bitmap.PixelFormat);

                    Trace.WriteLine($"Options: {options}; Quality: {quality}");
                    Assert.DoesNotThrow(() =>
                    {
                        var result = _compressor.Compress(data.Scan0, data.Stride, data.Width, data.Height, TestUtils.ConvertPixelFormat(data.PixelFormat), options, quality, TJFlags.NONE);
                        Assert.NotNull(result);
                    });
                }
                finally
                {
                    if (data != null)
                    {
                        bitmap.UnlockBits(data);
                    }
                    bitmap.Dispose();
                }
            }
        }
Exemple #2
0
        public void CompressBitmap(
            [Values
                 (TJSubsamplingOptions.TJSAMP_GRAY,
                 TJSubsamplingOptions.TJSAMP_411,
                 TJSubsamplingOptions.TJSAMP_420,
                 TJSubsamplingOptions.TJSAMP_440,
                 TJSubsamplingOptions.TJSAMP_422,
                 TJSubsamplingOptions.TJSAMP_444)] TJSubsamplingOptions options,
            [Values(1, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100)] int quality)
        {
            var imageidx = 0;

            foreach (var bitmap in TestUtils.GetTestImages("*.bmp"))
            {
                try
                {
                    Trace.WriteLine($"Options: {options}; Quality: {quality}");
                    Assert.DoesNotThrow(() =>
                    {
                        var result = _compressor.Compress(bitmap, options, quality, TJFlags.NONE);

                        Assert.NotNull(result);

                        var file = Path.Combine(OutDirectory, $"{imageidx}_{quality}_{options}.jpg");
                        File.WriteAllBytes(file, result);
                    });
                }
                finally
                {
                    bitmap.Dispose();
                }
                imageidx++;
            }
        }
Exemple #3
0
 public static void Encode(string inPath, string outPath, int q, bool chromaSubSample = true)
 {
     try
     {
         Bitmap bmp         = (Bitmap)ImgUtils.GetImage(inPath);
         var    commpressor = new TJCompressor();
         byte[] compressed;
         TJSubsamplingOption subSample = TJSubsamplingOption.Chrominance420;
         if (!chromaSubSample)
         {
             subSample = TJSubsamplingOption.Chrominance444;
         }
         compressed = commpressor.Compress(bmp, subSample, q, TJFlags.None);
         File.WriteAllBytes(outPath, compressed);
         Logger.Log("[MozJpeg] Written image to " + outPath);
     }
     catch (TypeInitializationException e)
     {
         Logger.ErrorMessage($"MozJpeg Initialization Error: {e.InnerException.Message}\n", e);
     }
     catch (Exception e)
     {
         Logger.ErrorMessage("MozJpeg Error: ", e);
     }
 }
Exemple #4
0
        public static void Encode(string inPath, string outPath, int q, Subsampling subsampling, bool printSubsampling = true)
        {
            try
            {
                Bitmap bmp        = (Bitmap)IOUtils.GetImage(inPath);
                var    compressor = new TJCompressor();
                byte[] compressed;

                TJSubsamplingOption subSample = TJSubsamplingOption.Chrominance420;
                if (subsampling == Subsampling.Chroma422)
                {
                    subSample = TJSubsamplingOption.Chrominance422;
                }
                if (subsampling == Subsampling.Chroma444)
                {
                    subSample = TJSubsamplingOption.Chrominance444;
                }

                if (printSubsampling)
                {
                    Program.Print("-> Chroma Subsampling: " + subSample.ToString().Replace("Chrominance", ""));
                }

                compressed = compressor.Compress(bmp, subSample, q, TJFlags.None);
                File.WriteAllBytes(outPath, compressed);

                //Program.Print("[MozJpeg] Written image to " + outPath);
            }
            catch (Exception e)
            {
                Program.Print("MozJpeg Error: " + e.Message);
            }
        }
Exemple #5
0
 public static byte[] PackScreenCaptureData(Bitmap image, Rectangle bounds)
 {
     byte[] results = {};
     try
     {
         using (var compressor = new TJCompressor())
             using (var screenStream = new MemoryStream())
                 using (var binaryWriter = new BinaryWriter(screenStream))
                 {
                     binaryWriter.Write(Id);
                     //write the x and y coords of the
                     binaryWriter.Write(bounds.X);
                     binaryWriter.Write(bounds.Y);
                     //write the rect data
                     binaryWriter.Write(bounds.Top);
                     binaryWriter.Write(bounds.Bottom);
                     binaryWriter.Write(bounds.Left);
                     binaryWriter.Write(bounds.Right);
                     var imageData = compressor.Compress(image, TJSubsamplingOptions.TJSAMP_420, 50, TJFlags.FASTDCT);
                     binaryWriter.Write(imageData);
                     results = screenStream.ToArray();
                 }
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.Message);
     }
     return(results);
 }
Exemple #6
0
        public ActionResult Compress(string path)
        {
            using (var bmp = new Bitmap(path))
            {
                using (var tjc = new TJCompressor())
                {
                    var compressed = tjc.Compress(bmp, TJSubsamplingOption.Chrominance420, 85, TJFlags.None);
                    var outPath    = Path.Combine(Path.GetDirectoryName(path), $"compressed-", Path.GetFileName(path));
                    System.IO.File.WriteAllBytes(outPath, compressed);
                }
            }

            return(new HttpStatusCodeResult(HttpStatusCode.OK));
        }
        /// <summary>
        /// Encodes the image to the specified stream from the <see cref="Image{TPixel}"/>.
        /// </summary>
        /// <typeparam name="TPixel">The pixel format.</typeparam>
        /// <param name="image">The <see cref="Image{TPixel}"/> to encode from.</param>
        /// <param name="stream">The <see cref="Stream"/> to encode the image data to.</param>
        public void Encode <TPixel>(Image <TPixel> image, Stream stream)
            where TPixel : struct, IPixel <TPixel>
        {
            var subsample  = this.Subsample ?? (this.Quality >= 91 ? JpegSubsample.Ratio444 : JpegSubsample.Ratio420);
            var bytes      = MemoryMarshal.AsBytes(image.Frames.RootFrame.PixelBuffer.Span);
            var compressor = new TJCompressor();
            var result     = compressor.Compress(
                bytes.ToArray(),
                image.Width * 4,
                image.Width,
                image.Height,
                PixelFormat.Format32bppArgb,
                subsample == JpegSubsample.Ratio420 ? TJSubsamplingOptions.TJSAMP_420 : TJSubsamplingOptions.TJSAMP_422,
                this.Quality,
                TJFlags.FASTDCT);

            stream.Write(result, 0, result.Length);
        }
        public override double Encode(List <byte[]> JList, object CompressionQuality, bool debugInfoIsOn = false)
        {
            Console.WriteLine();
            Console.WriteLine("Converting by libJPEG Turbo to JPG");

            double avgtime = 0;
            double delta;
            int    i = 0;

            var compressor = new TJCompressor();

            foreach (byte[] bitmap in JList)
            {
                MemoryStream stream = new MemoryStream();

                Image    img         = Image.FromStream(new MemoryStream(bitmap));
                var      sourceImage = (Bitmap)img;
                var      width       = img.Width;
                var      height      = img.Height;
                byte[]   output;
                DateTime start = DateTime.Now;

                output = compressor.Compress(sourceImage, TJSubsamplingOptions.TJSAMP_420, Convert.ToInt32(CompressionQuality), TJFlags.FASTUPSAMPLE);
                DateTime finish = DateTime.Now;
                delta    = (finish - start).TotalMilliseconds;
                avgtime += delta;

                using (FileStream file = new FileStream("output\\libJPEGTurbo" + i.ToString() + ".jpg", FileMode.Create, System.IO.FileAccess.Write))
                {
                    file.Write(output, 0, output.Length);
                }
                if (debugInfoIsOn)
                {
                    Console.WriteLine("Done converting image {0}. Size: {1}. Time: {2} ms", i, img.Size, delta);
                }

                i++;
            }
            Console.WriteLine("..done.");
            return(avgtime);
        }
Exemple #9
0
    // Start is called before the first frame update
    void Start()
    {
        TJDecompressor decompressor = new TJDecompressor();
        TJCompressor   compressor   = new TJCompressor();

        byte[] compressedImage = File.ReadAllBytes("Assets/Images/image.jpg");

        float             startTime         = Time.realtimeSinceStartup;
        DecompressedImage decompressedImage = decompressor.Decompress(compressedImage, TJPixelFormat.RGBA, TJFlags.None);

        Debug.Log("Image decompressed. Execution time : " + (Time.realtimeSinceStartup - startTime).ToString() + " secondes.");


        startTime = Time.realtimeSinceStartup;
        byte[] recompressedImage = compressor.Compress(decompressedImage.Data, decompressedImage.Stride, decompressedImage.Width, decompressedImage.Height, decompressedImage.PixelFormat, TJSubsamplingOption.Chrominance420, 92, TJFlags.None);
        Debug.Log("Image recompressed. Execution time : " + (Time.realtimeSinceStartup - startTime).ToString() + " secondes.");

        File.WriteAllBytes("Assets/Images/recompressedImage.jpg", recompressedImage);
        Debug.Log("Recompressed image saved at : Assets/Images/recompressedImage.jpg");
        ;
    }
        private static void JpegTurboCompression()
        {
            var  sw          = new Stopwatch();
            var  sourceImage = (Bitmap)Image.FromFile(@"D:\Downloads\1.jpg");
            var  width       = sourceImage.Width;
            var  height      = sourceImage.Height;
            long average     = 0;
            var  iterations  = 0;

            var compressor = new TJCompressor();

            try
            {
                Console.WriteLine("Using libjpeg turbo");
                while (!_stop)
                {
                    sw.Restart();

                    compressor.Compress(sourceImage, TJSubsamplingOptions.TJSAMP_GRAY, Quality, TJFlags.BOTTOMUP);

                    sw.Stop();
                    var sleepValue = 1000 / 25.0 - sw.ElapsedMilliseconds;
                    if (sleepValue < 0)
                    {
                        sleepValue = 0;
                    }
                    average += sw.ElapsedMilliseconds;
                    iterations++;
                    Thread.Sleep((int)sleepValue);
                }

                Console.WriteLine("Average compression time for image {0}x{1} is {2:f3} ms. Iterations count {3}", width, height, (double)average / iterations, iterations);
            }
            finally
            {
                compressor.Dispose();
                sourceImage.Dispose();
                Wait.Set();
            }
        }
        private static void JpegTurboCompression()
        {
            var sw = new Stopwatch();
            var sourceImage = (Bitmap)Image.FromFile(@"D:\Downloads\1.jpg");
            var width = sourceImage.Width;
            var height = sourceImage.Height;
            long average = 0;
            var iterations = 0;
            
            var compressor = new TJCompressor();

            try
            {
                Console.WriteLine("Using libjpeg turbo");
                while (!_stop)
                {
                    sw.Restart();

                    compressor.Compress(sourceImage, TJSubsamplingOptions.TJSAMP_GRAY, Quality, TJFlags.BOTTOMUP);

                    sw.Stop();
                    var sleepValue = 1000 / 25.0 - sw.ElapsedMilliseconds;
                    if (sleepValue < 0)
                        sleepValue = 0;
                    average += sw.ElapsedMilliseconds;
                    iterations++;
                    Thread.Sleep((int)sleepValue);
                }

                Console.WriteLine("Average compression time for image {0}x{1} is {2:f3} ms. Iterations count {3}", width, height, (double)average / iterations, iterations);
            }
            finally
            {
                compressor.Dispose();
                sourceImage.Dispose();
                Wait.Set();
            }
            
        }
Exemple #12
0
        private static void JpegTurboCompression()
        {
            var  sw          = new Stopwatch();
            var  sourceImage = (Bitmap)Image.FromFile(@"d:\1.jpg");
            var  pixelFormat = sourceImage.PixelFormat;
            var  width       = sourceImage.Width;
            var  height      = sourceImage.Height;
            long average     = 0;
            var  iterations  = 0;

            var compressor = new TJCompressor();
            // ReSharper disable once ExceptionNotDocumented
            var            srcData = sourceImage.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadOnly, pixelFormat);
            var            stride  = srcData.Stride;
            var            srcPtr  = srcData.Scan0;
            TJPixelFormats tjPixelFormat;

            switch (pixelFormat)
            {
            case PixelFormat.Format8bppIndexed:
                tjPixelFormat = TJPixelFormats.TJPF_GRAY;
                break;

            case PixelFormat.Format24bppRgb:
                tjPixelFormat = TJPixelFormats.TJPF_RGB;
                break;

            case PixelFormat.Format32bppArgb:
                tjPixelFormat = TJPixelFormats.TJPF_ARGB;
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            try
            {
                Console.WriteLine("Using libjpeg turbo");

                while (!_stop)
                {
                    sw.Restart();


                    compressor.Compress(srcPtr, stride, width, height, tjPixelFormat, TJSubsamplingOptions.TJSAMP_GRAY, Quality, TJFlags.BOTTOMUP);

                    sw.Stop();
                    var sleepValue = 1000 / 25.0 - sw.ElapsedMilliseconds;
                    if (sleepValue < 0)
                    {
                        sleepValue = 0;
                    }
                    average += sw.ElapsedMilliseconds;
                    iterations++;
                    Thread.Sleep((int)sleepValue);
                }

                Console.WriteLine("Average compression time for image {0}x{1} is {2:f3} ms. Iterations count {3}", width, height, (double)average / iterations, iterations);
            }
            finally
            {
                sourceImage.UnlockBits(srcData);
                compressor.Dispose();
                sourceImage.Dispose();
                Wait.Set();
            }
        }
 public byte[] Compress(IntPtr scan0, int stride, Size imageSize, PixelFormat pixelFormat)
 {
     return(_compressor.Compress(scan0, stride, imageSize.Width, imageSize.Height, pixelFormat,
                                 TJSubsamplingOptions.TJSAMP_444, Quality, TJFlags.FASTDCT));
 }