Exemplo n.º 1
0
        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;
            }
        }