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(Stream os, int currentGroup) { List <int> list = new List <int>(); for (int i = 0; i < queuedChunks.Count; i++) { PngChunk pngChunk = queuedChunks[i]; if (shouldWrite(pngChunk, currentGroup)) { if (ChunkHelper.IsCritical(pngChunk.Id) && !pngChunk.Id.Equals("PLTE")) { throw new PngjOutputException("bad chunk queued: " + pngChunk?.ToString()); } if (alreadyWrittenKeys.ContainsKey(pngChunk.Id) && !pngChunk.AllowsMultiple()) { throw new PngjOutputException("duplicated chunk does not allow multiple: " + pngChunk?.ToString()); } pngChunk.write(os); chunks.Add(pngChunk); alreadyWrittenKeys[pngChunk.Id] = ((!alreadyWrittenKeys.ContainsKey(pngChunk.Id)) ? 1 : (alreadyWrittenKeys[pngChunk.Id] + 1)); list.Add(i); pngChunk.ChunkGroup = currentGroup; } } for (int num = list.Count - 1; num >= 0; num--) { queuedChunks.RemoveAt(list[num]); } return(list.Count); }