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(); } } }
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++; } }
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); } }
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); } }
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); }
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); }
// 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(); } }
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)); }