public IEnumerator <Chunk> GetEnumerator() { List <Chunk> chunksPorOrden = new List <Chunk>(); chunksPorOrden.Add(IHDR); //pongo los que van antes que PLTE chunksPorOrden.AddRange(extras.Filtra(chunk => { return(chunksAfterPLTE.Existe(chunk.ChunkType)); })); if (iCCP != null) { chunksPorOrden.Add(iCCP); } else if (sRGB != null) { chunksPorOrden.Add(sRGB); } //pongo si esta PLTE if (PLTE != null) { chunksPorOrden.Add(PLTE); } //pongo los que van despues de PLTE chunksPorOrden.AddRange(extras.Filtra(chunk => { return(chunksBeforePLTE.Existe(chunk.ChunkType)); })); chunksPorOrden.AddRange(idats); //pongo los que van despues de IDAT chunksPorOrden.AddRange(extras.Filtra(chunk => { return(chunksAfterIDAT.Existe(chunk.ChunkType)); })); //pongo los que no tienen orden chunksPorOrden.AddRange(extras.Filtra(chunk => { return(chunksSinPosicion.Existe(chunk.ChunkType)); })); if (tIME == null) { UpdateTIMELastModification(); } if (SoftwareMetadata) { metadata.AddOrReplace(Metadata.Software.ToString(), new tEXtChunk(Metadata.Software.ToString(), "Gabriel.Cat.PNG")); } chunksPorOrden.Add(tIME); chunksPorOrden.AddRange(metadata.ValuesToArray()); chunksPorOrden.Add(IEND); return(chunksPorOrden.GetEnumerator()); }