Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }