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