You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			60 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C#
		
	
| using Aseprite.Chunks;
 | |
| using System.IO;
 | |
| 
 | |
| namespace Aseprite
 | |
| {
 | |
|     public enum ChunkType : ushort
 | |
|     {
 | |
|         OldPalette = 0x0004,
 | |
|         OldPalette2 = 0x0011,
 | |
|         Layer = 0x2004,
 | |
|         Cel = 0x2005,
 | |
|         CelExtra = 0x2006,
 | |
|         Mask = 0x2016, // DEPRECATED
 | |
|         Path = 0x2017, // NEVER USED
 | |
|         FrameTags = 0x2018,
 | |
|         Palette = 0x2019,
 | |
|         UserData = 0x2020
 | |
|     }
 | |
| 
 | |
|     public class Chunk
 | |
|     {
 | |
|         public const int HEADER_SIZE = 6;
 | |
| 
 | |
|         protected Frame Frame = null;
 | |
|         public uint Length { get; private set; }
 | |
|         public ChunkType ChunkType { get; private set; }
 | |
| 
 | |
|         public Chunk(uint length, ChunkType type)
 | |
|         {
 | |
|             Length = length;
 | |
|             ChunkType = type;
 | |
|         }
 | |
| 
 | |
|         public static Chunk ReadChunk(Frame frame, BinaryReader reader)
 | |
|         {
 | |
|             uint length = reader.ReadUInt32();
 | |
|             ChunkType type = (ChunkType)reader.ReadUInt16();
 | |
| 
 | |
|             switch (type)
 | |
|             {
 | |
|                 case ChunkType.Cel:
 | |
|                     return CelChunk.ReadCelChunk(length, reader, frame);
 | |
|                 case ChunkType.CelExtra:
 | |
|                     return new CelExtraChunk(length, reader) { Frame = frame };
 | |
|                 case ChunkType.Layer:
 | |
|                     return new LayerChunk(length, reader) { Frame = frame };
 | |
|                 case ChunkType.FrameTags:
 | |
|                     return new FrameTagsChunk(length, reader) { Frame = frame };
 | |
|                 case ChunkType.Palette:
 | |
|                     return new PaletteChunk(length, reader) { Frame = frame };
 | |
|                 case ChunkType.OldPalette:
 | |
|                     return new OldPaletteChunk(length, reader) { Frame = frame };
 | |
|             }
 | |
| 
 | |
|             reader.BaseStream.Position += length - Chunk.HEADER_SIZE;
 | |
|             return null;
 | |
|         }
 | |
|     }
 | |
| }
 |