internal int WriteChunks(Stream os, int currentGroup) { List <int> written = new List <int>(); for (int i = 0; i < queuedChunks.Count; i++) { PngChunk c = queuedChunks[i]; if (!ShouldWrite(c, currentGroup)) { continue; } if (ChunkHelper.IsCritical(c.Id) && !c.Id.Equals(ChunkHelper.PLTE)) { throw new PngjOutputException("bad chunk queued: " + c); } if (alreadyWrittenKeys.ContainsKey(c.Id) && !c.AllowsMultiple()) { throw new PngjOutputException("duplicated chunk does not allow multiple: " + c); } c.Write(os); chunks.Add(c); alreadyWrittenKeys[c.Id] = alreadyWrittenKeys.ContainsKey(c.Id) ? alreadyWrittenKeys[c.Id] + 1 : 1; written.Add(i); c.ChunkGroup = currentGroup; } for (int k = written.Count - 1; k >= 0; k--) { queuedChunks.RemoveAt(written[k]); } return(written.Count); }
internal int WriteChunks(IO.Stream os, int currentGroup) { List <int> written = new List <int>(); for (int i = 0; i < queuedChunks.Count; i++) { PngChunk chunk = queuedChunks[i]; if (!ShouldWrite(chunk, currentGroup)) { continue; } if (ChunkHelper.IsCritical(chunk.Id) && !chunk.Id.Equals(ChunkHelper.PLTE)) { throw new System.IO.IOException($"bad chunk queued: {chunk}"); } if (alreadyWrittenKeys.ContainsKey(chunk.Id) && !chunk.AllowsMultiple()) { throw new System.IO.IOException($"duplicated chunk does not allow multiple: {chunk}"); } chunk.Write(os); chunks.Add(chunk); alreadyWrittenKeys[chunk.Id] = alreadyWrittenKeys.ContainsKey(chunk.Id) ? alreadyWrittenKeys[chunk.Id] + 1 : 1; written.Add(i); chunk.ChunkGroup = currentGroup; } for (int k = written.Count - 1; k != -1; k--) { queuedChunks.RemoveAt(written[k]); } return(written.Count); }