private static int Main(string[] args) { // This sample demonstrates how to convert 8 bit monochrome images and 24 bit color images to a .jls // The input path should be a absolute path to a file format .NET can read (.bmp, .png, etc). string inputPath; if (!TryParseArguments(args, out inputPath)) { Console.WriteLine("Usage: Converter <path to image file>"); return(Failure); } try { // Load the image file and get the first frame. var decoder = BitmapDecoder.Create(new Uri(inputPath, UriKind.Absolute), BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default); var frame = decoder.Frames[0]; int componentCount; if (!TryGetComponentCount(frame.Format, out componentCount)) { Console.WriteLine("Input has format: {0}, which is not supported", frame.Format); return(Failure); } var uncompressedPixels = new byte[frame.PixelWidth * frame.PixelHeight * componentCount]; frame.CopyPixels(uncompressedPixels, frame.PixelWidth * componentCount, 0); // Prepare the 'info' metadata that describes the pixels in the byte buffer. var info = new JpegLSMetadataInfo(frame.PixelWidth, frame.PixelHeight, 8, componentCount); if (componentCount == 3) { info.InterleaveMode = JpegLSInterleaveMode.Line; // PixelFormat is Bgr24. CharLS expects RGB byte stream. // By enabling this CharLS will transform input before decoding. info.OutputBgr = true; } // Compress. var compressedPixels = JpegLSCodec.Compress(info, uncompressedPixels, true); Save(compressedPixels.Array, compressedPixels.Count, GetOutputPath(inputPath)); } catch (FileNotFoundException e) { Console.WriteLine("Error: " + e.Message); } return(Success); }
public void CompressOneByOneBlackAndWhite() { var info = new JpegLSMetadataInfo(1, 1, 1, 1); var uncompressedOriginal = new byte[] { 1 }; var compressedSegment = JpegLSCodec.Compress(info, uncompressedOriginal); var compressed = new byte[compressedSegment.Count]; Array.Copy(compressedSegment.Array, compressed, compressed.Length); var uncompressed = JpegLSCodec.Decompress(compressed); Assert.AreEqual(info.UncompressedSize, uncompressed.Length); Assert.AreEqual(uncompressedOriginal, uncompressed); }
public void Compress() { var info = new JpegLSMetadataInfo(256, 256, 8, 3); var uncompressedOriginal = ReadAllBytes("TEST8.PPM", 15); uncompressedOriginal = TripletToPlanar(uncompressedOriginal, info.Width, info.Height); var compressedSegment = JpegLSCodec.Compress(info, uncompressedOriginal); var compressed = new byte[compressedSegment.Count]; Array.Copy(compressedSegment.Array, compressed, compressed.Length); var compressedInfo = JpegLSCodec.GetMetadataInfo(compressed); Assert.AreEqual(info, compressedInfo); var uncompressed = JpegLSCodec.Decompress(compressed); Assert.AreEqual(info.UncompressedSize, uncompressed.Length); Assert.AreEqual(uncompressedOriginal, uncompressed); }