async Task ParseImageDescriptorAsync(GIFDecoderStreamReader stream, GIFBitmapDecoder decoder, GIFBitmap previousBitmap, bool ignoreImageData) { await ParseGIFBitmapHeaderAsync(stream).ConfigureAwait(false); if (IsTransparent) { ColorTable.SetTransparency(TransparencyIndex); } DataPosition = stream.CurrentPosition; if (!ignoreImageData) { // Decode LZW data stream. await decoder.DecodeAsync(stream, _header.Width, _header.Height).ConfigureAwait(false); // Compose bitmap from decoded data stream. decoder.Compose(_header, this, previousBitmap); // Consume block terminator. await stream.SkipBlockAsync().ConfigureAwait(false); } else { // Read pass variable length LZW data stream. // First byte is LZW code size followed by data blocks repeated until block terminator. stream.Read(); await stream.SkipBlockAsync().ConfigureAwait(false); } if (IsTransparent) { ColorTable.ResetTransparency(); } }