예제 #1
0
 private void ReadATTRChunk(IFFReader iff, ChunkAttributes attr)
 {
     Version  = iff.ReadInt32();
     Width    = iff.ReadInt32();
     Height   = iff.ReadInt32();
     DataSize = iff.ReadInt32();
 }
예제 #2
0
        /// <summary>Static data initialization.</summary>
        static ChunkNameExtensions()
        {
            Type aviChunkNameType = typeof(AviChunkName);

            ICollection <AviChunkName> allContainerChunks = new HashSet <AviChunkName>();

            ChunkNameForChunkType       = new Dictionary <uint, AviChunkName>();
            ChunkAttributesForChunkName = new Dictionary <AviChunkName, ChunkAttributes>();

            // Create the list to feed to the chunks that can be in all container chunks
            allContainerChunks.Add(AviChunkName.Root);

            // Use reflection to find the attributes describing the codec identifiers
            foreach (AviChunkName chunkName in Enum.GetValues(aviChunkNameType))
            {
                string name = Enum.GetName(aviChunkNameType, chunkName);

                FieldInfo      fieldInfo  = aviChunkNameType.GetField(name);
                AviAttribute[] attributes = (AviAttribute[])fieldInfo.GetCustomAttributes(typeof(AviAttribute), false);

                if (chunkName == AviChunkName.Root)
                {
                    // The root container has no metadata and does not occur in any other chunk
                    ChunkAttributesForChunkName.Add(chunkName, new ChunkAttributes(new uint[0], ChunkFlags.ContainerChunk, new AviChunkName[0]));
                }
                else if (attributes != null && attributes.Length == 1)
                {
                    ChunkAttributes chunkAttributes = GetChunkAttributes(chunkName, attributes[0], allContainerChunks);
                    ChunkAttributesForChunkName.Add(chunkName, chunkAttributes);

                    // List all 4CC for this chunk
                    foreach (uint chunkType in chunkAttributes.ChunkTypes)
                    {
                        Debug.Assert(!ChunkNameForChunkType.ContainsKey(chunkType), string.Format("Duplicate 4CC '{0}'", chunkType.ToString4CC()));
                        ChunkNameForChunkType.Add(chunkType, chunkName);
                    }
                }
                else
                {
                    Debug.Fail(string.Format("No attributes for {0}. Please add attributes to the ChunkName enumeration.", chunkName));
                }
            }

            CheckSuitableParents();
        }
예제 #3
0
 private void ReadGLPHChunk(IFFReader iff, ChunkAttributes attr)
 {
     _glyphs.Add(Glyph.Read(iff));
 }
예제 #4
0
 private void ReadIMAGChunk(IFFReader iff, ChunkAttributes attr)
 {
     _images.Add(Image.Read(iff));
 }
예제 #5
0
 private void ReadATTRChunk(IFFReader iff, ChunkAttributes attr)
 {
     Attributes = iff.ReadString();
 }
예제 #6
0
 private void ReadNAMEChunk(IFFReader iff, ChunkAttributes attr)
 {
     Name = iff.ReadString();
 }
예제 #7
0
 private void ReadDATAChunk(IFFReader iff, ChunkAttributes attr)
 {
     Data = iff.ReadBytes(attr.Size);
 }
예제 #8
0
 private void CreateNewChunk(int x, int z)
 {
     chunks[x, z] = new ChunkAttributes(new ChunkCoord(x, z), this);
     activeChunks.Add(new ChunkCoord(x, z));
 }