/// <summary>
 /// Constructor must be called just after reading length and id of first IDAT
 /// chunk
 /// </summary>
 ///
 public PngIDatChunkInputStream(Stream iStream, int lenFirstChunk, long offset_0)
 {
     this.idLastChunk = new byte[4];
     this.toReadThisChunk = 0;
     this.ended = false;
     this.foundChunksInfo = new List<IdatChunkInfo>();
     this.offset = offset_0;
     checkCrc = true;
     inputStream = iStream;
     crcEngine = new CRC32();
     this.lenLastChunk = lenFirstChunk;
     toReadThisChunk = lenFirstChunk;
     // we know it's a IDAT
     System.Array.Copy((Array)(Hjg.Pngcs.Chunks.ChunkHelper.b_IDAT), 0, (Array)(idLastChunk), 0, 4);
     crcEngine.Update(idLastChunk, 0, 4);
     foundChunksInfo.Add(new PngIDatChunkInputStream.IdatChunkInfo(lenLastChunk, offset_0 - 8));
     // PngHelper.logdebug("IDAT Initial fragment: len=" + lenLastChunk);
     if (this.lenLastChunk == 0)
         EndChunkGoForNext(); // rare, but...
 }
 /// <summary>
 /// thread-singleton crc engine
 /// </summary>
 ///
 public static CRC32 GetCRC()
 {
     if (crc32Engine == null) crc32Engine = new CRC32();
     return crc32Engine;
 }