Пример #1
0
        public void DecompressBitStreamWithNoMarkerStart()
        {
            var compressed = new byte[] { 0x33, 0x33 };

            var exception = Assert.Throws <InvalidDataException>(() => JpegLSCodec.Decompress(compressed));

            Assert.AreEqual(JpegLSError.MissingJpegMarkerStart, exception.Data["JpegLSError"]);
        }
Пример #2
0
        public void GetMetadataInfoFromNearLosslessEncodedColorImage()
        {
            var source   = ReadAllBytes("T8C0E3.JLS");
            var info     = JpegLSCodec.GetMetadataInfo(source);
            var expected = new JpegLSMetadataInfo {
                Height = 256, Width = 256, BitsPerComponent = 8, ComponentCount = 3, AllowedLossyError = 3
            };

            Assert.AreEqual(expected, info);
        }
Пример #3
0
        public void DecodeBitStreamWithUnsupportedEncoding()
        {
            var compressed = new byte[]
            {
                0xFF, 0xD8,    // Start Of Image (JPEG_SOI)
                0xFF, 0xC3,    // Start Of Frame (lossless, huffman) (JPEG_SOF_3)
                0x00, 0x00     // Lenght of data of the marker
            };
            var exception = Assert.Throws <InvalidDataException>(() => JpegLSCodec.Decompress(compressed));

            Assert.AreEqual(JpegLSError.UnsupportedEncoding, exception.Data["JpegLSError"]);
        }
Пример #4
0
        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);
        }
Пример #5
0
        public void TestDecodeBitStreamWithUnknownJpegMarker()
        {
            var compressed = new byte[]
            {
                0xFF, 0xD8,    // Start Of Image (JPEG_SOI)
                0xFF, 0x01,    // Undefined marker
                0x00, 0x00     // Lenght of data of the marker
            };

            var exception = Assert.Throws <InvalidDataException>(() => JpegLSCodec.Decompress(compressed));

            Assert.AreEqual(JpegLSError.UnknownJpegMarker, exception.Data["JpegLSError"]);
        }
Пример #6
0
        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);
        }
Пример #7
0
        public void Decompress()
        {
            var source       = ReadAllBytes("T8C0E0.JLS");
            var expected     = ReadAllBytes("TEST8.PPM", 15);
            var uncompressed = JpegLSCodec.Decompress(source);

            var info = JpegLSCodec.GetMetadataInfo(source);

            if (info.InterleaveMode == JpegLSInterleaveMode.None && info.ComponentCount == 3)
            {
                expected = TripletToPlanar(expected, info.Width, info.Height);
            }

            Assert.AreEqual(expected, uncompressed);
        }
Пример #8
0
        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);
        }