public void Decompress(Stream jpeg, IDecompressDestination destination)
{
if (jpeg == null)
throw new ArgumentNullException("jpeg");
if (destination == null)
throw new ArgumentNullException("destination");
beforeDecompress(jpeg);
// Start decompression
m_decompressor.jpeg_start_decompress();
LoadedImageAttributes parameters = getImageParametersFromDecompressor();
destination.SetImageAttributes(parameters);
destination.BeginWrite();
/* Process data */
while (m_decompressor.Output_scanline < m_decompressor.Output_height)
{
byte[][] row = jpeg_common_struct.AllocJpegSamples(m_decompressor.Output_width * m_decompressor.Output_components, 1);
m_decompressor.jpeg_read_scanlines(row, 1);
destination.ProcessPixelsRow(row[0]);
}
destination.EndWrite();
// Finish decompression and release memory.
m_decompressor.jpeg_finish_decompress();
}