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