コード例 #1
0
 /// <summary>
 /// Reads image in JPEG format and saves to BMP format using memory-friendly Pipeline API
 /// </summary>
 private static void WriteBmpMemoryFriendly()
 {
     using (var reader = new JpegReader("../../../../_Input/Chicago.jpg"))
         using (var flip = new Flip(FlipType.Vertical))
             using (var writer = new BmpWriter("../../../../_Output/WriteBmpMemoryFriendly.bmp"))
             {
                 Pipeline.Run(reader + flip + writer);
             }
 }
コード例 #2
0
    /// <summary>
    /// Reads image in BMP format, converts to palette-based pixel format and saves to BMP format with RLE compression
    /// using memory-friendly Pipeline API
    /// </summary>
    private static void ReadConvertAndWriteBmpMemoryFriendly()
    {
        using (var reader = new BmpReader("../../../../_Output/WriteBmpMemoryFriendly.bmp"))
            using (var colorConverter = new ColorConverter(PixelFormat.Format8bppIndexed))
                using (var writer = new BmpWriter("../../../../_Output/ReadConvertAndWriteBmpMemoryFriendly.bmp"))
                {
                    writer.Compression = CompressionType.Rle;

                    Pipeline.Run(reader + colorConverter + writer);
                }
    }
コード例 #3
0
        private GifFrame ReadImageData(BinaryReader reader)
        {
            var imageDescriptor = ImageDescriptor.Read(reader);
            var localPalette    = imageDescriptor.HasLocalPalette ? GifPalette.Read(reader, imageDescriptor.LocalPaletteColorCount) : null;

            var lzwInitialCodeSize = reader.ReadByte() + 1;

            var lzwBitReader = new GifLzwBitReader(new GifLzwByteReader(reader));

            var lzwCodeSize  = lzwInitialCodeSize;
            var nextIncValue = (2 << (lzwCodeSize - 1)) - 1;
            var decodeTable  = new GifDecodeTable(_sreenDescriptor.GlobalPaletteColorCount);

            int value;

#if SILVERLIGHT
            var writeableBmp = new WriteableBitmap(_sreenDescriptor.Width, _sreenDescriptor.Height);
#else
            var writeableBmp = new WriteableBitmap(_sreenDescriptor.Width, _sreenDescriptor.Height, 96.0, 96.0, PixelFormats.Bgra32, null);
#endif

            var bmpWriter = new BmpWriter(writeableBmp, _globalPalette);

            while (lzwBitReader.Read(lzwCodeSize, out value))
            {
                if (decodeTable.Count == nextIncValue)
                {
                    lzwCodeSize++;
                    nextIncValue = (2 << (lzwCodeSize - 1)) - 1;
                }

                bool reset;
                if (decodeTable.ProcessNextCode(value, bmpWriter, out reset) == false)
                {
                    break;
                }

                if (reset)
                {
                    lzwCodeSize  = lzwInitialCodeSize;
                    nextIncValue = (2 << (lzwCodeSize - 1)) - 1;
                }

                if (lzwCodeSize > 12)
                {
                    lzwCodeSize = 12;
                }
            }

            bmpWriter.Flush();

            return(new GifFrame(imageDescriptor, localPalette, writeableBmp));
        }