public void Add(Chunk chunk, bool reemplazarOExcepcion) { Chunk chunkABuscar = null; switch (chunk.ChunkType) { case IDATChunk.NAME: idats.Add(chunk); break; case "iCCP": if (sRGB != null) { if (reemplazarOExcepcion) { sRGB = null; } else { throw new Exception("Ya existe un chunk sRGB por lo que no puede ir un iCCP"); } } if (iCCP != null) { if (!reemplazarOExcepcion) { throw new Exception("Chunk " + chunk.ChunkType + " repetido...solo puede haber uno"); } } iCCP = chunk; break; case "sRGB": if (iCCP != null) { if (reemplazarOExcepcion) { iCCP = null; } else { throw new Exception("Ya existe un chunk iCCP por lo que no puede ir un sRGB"); } } if (sRGB != null) { if (!reemplazarOExcepcion) { throw new Exception("Chunk " + chunk.ChunkType + " repetido...solo puede haber uno"); } } sRGB = chunk; break; case tIMEChunk.NAME: if (tIME != null && !reemplazarOExcepcion) { throw new Exception("Solo puede haber un chunk tIME!!"); } tIME = new tIMEChunk(chunk); break; case "PLTE": if (PLTE != null && !reemplazarOExcepcion) { throw new Exception("Solo puede haber un chunk PLTE!!"); } PLTE = chunk; break; case tEXtChunk.NAME: tEXtChunk tEXt = new tEXtChunk(chunk); metadata.Add(tEXt.Keyword, tEXt); break; case zTXtChunk.NAME: zTXtChunk zTXt = new zTXtChunk(chunk); metadata.Add(zTXt.Keyword, zTXt); break; default: if (!chunksCeroOIlimitados.Existe(chunk.ChunkType)) { //miro si existe extras.WhileEach(chunkToCompare => { if (chunkToCompare.Equals(chunk)) { chunkABuscar = chunk; } return(chunkABuscar == null); }); //si existe lo trato if (chunkABuscar != null) { if (reemplazarOExcepcion) { extras.Remove(chunkABuscar); } else { throw new Exception("Solo puede haber uno de " + chunkABuscar); } } } extras.Add(chunk); break; } }