コード例 #1
0
ファイル: AseHeader.cs プロジェクト: Kyjor/MiniJam56Sky
        public AseHeader(AseReader reader)
        {
            FileSize    = reader.ReadDWORD();
            MagicNumber = reader.ReadWORD();
            NumFrames   = reader.ReadWORD();
            Width       = reader.ReadWORD();
            Height      = reader.ReadWORD();
            ColorDepth  = reader.ReadColorDepth();
            Flags       = (HeaderFlags)reader.ReadDWORD();
            Speed       = reader.ReadWORD();

            // Next two dwords are ignored
            reader.ReadDWORD();
            reader.ReadDWORD();

            TransparentIndex = reader.ReadBYTE();

            // Next 3 bytes are ignored
            reader.ReadBYTEs(3);

            NumColors   = reader.ReadWORD();
            PixelWidth  = reader.ReadBYTE();
            PixelHeight = reader.ReadBYTE();

            // Last 92 bytes are reserved for future use
            reader.ReadBYTEs(92);

            Debug.Assert(MagicNumber == 0xA5E0);
        }
コード例 #2
0
ファイル: AseFrame.cs プロジェクト: Kyjor/MiniJam56Sky
        public AseFrame(AseFile file, AseReader reader)
        {
            AseFile = file;

            NumBytesInFrame = reader.ReadDWORD();
            MagicNumber     = reader.ReadWORD();
            NumChunks       = reader.ReadWORD();
            FrameDurationMs = reader.ReadWORD();

            // Ingore next two bytes
            reader.ReadBYTEs(2);

            // Later versions of Aseprite may overwrite our number of chunks
            var nchunks = reader.ReadDWORD();

            if (NumChunks == 0xFFFF && NumChunks < nchunks)
            {
                NumChunks = nchunks;
            }

            // Read in old and new chunks
            Chunks = Enumerable.Repeat <AseChunk>(null, (int)NumChunks).ToList();
            for (int i = 0; i < NumChunks; i++)
            {
                Chunks[i] = ReadChunk(reader);
            }

            Debug.Assert(MagicNumber == 0xF1FA);
        }
コード例 #3
0
ファイル: AsePaletteChunk.cs プロジェクト: Kyjor/MiniJam56Sky
        public AsePaletteChunk(AseFrame frame, AseReader reader)
            : base(frame)
        {
            PaletteSize = (int)reader.ReadDWORD();
            FirstIndex  = (int)reader.ReadDWORD();
            LastIndex   = (int)reader.ReadDWORD();

            // Next 8 bytes are ignored
            reader.ReadBYTEs(8);

            Entries = Enumerable.Repeat <AsePaletteEntry>(null, LastIndex + 1).ToList();
            for (int i = FirstIndex; i <= LastIndex; i++)
            {
                Entries[i] = new AsePaletteEntry(reader);
            }
        }
コード例 #4
0
ファイル: AseFrame.cs プロジェクト: Kyjor/MiniJam56Sky
        private AseChunk ReadChunk(AseReader reader)
        {
            uint      size = reader.ReadDWORD();
            ChunkType type = (ChunkType)reader.ReadWORD();

            return(ChunkFactory.ReadChunk(this, type, (int)(size - 6), reader));
        }
コード例 #5
0
        public AseSliceChunk(AseFrame frame, AseReader reader)
            : base(frame)
        {
            NumSliceKeys = reader.ReadDWORD();
            Flags        = (SliceFlags)reader.ReadDWORD();

            // Ignore next dword
            reader.ReadDWORD();

            Name = reader.ReadSTRING();

            Entries = Enumerable.Repeat <AseSliceEntry>(null, (int)NumSliceKeys).ToList();
            for (int i = 0; i < (int)NumSliceKeys; i++)
            {
                Entries[i] = new AseSliceEntry(reader, Flags);
            }
        }
コード例 #6
0
        public AseColorProfileChunk(AseFrame frame, AseReader reader)
            : base(frame)
        {
            ColorProfileType  = (ColorProfileType)reader.ReadWORD();
            ColorProfileFlags = (ColorProfileFlags)reader.ReadWORD();
            GammaFixed        = reader.ReadDWORD();

            // Next 8 bytes are reserved
            reader.ReadBYTEs(8);

            // fixit - what to do with color profile data?
            if (ColorProfileType == ColorProfileType.EmbeddedICC)
            {
                var length = (int)reader.ReadDWORD();
                reader.ReadBYTEs(length);
            }
        }
コード例 #7
0
        public AseColorProfileChunk(AseFrame frame, AseReader reader)
            : base(frame)
        {
            ColorProfileType  = (ColorProfileType)reader.ReadWORD();
            ColorProfileFlags = (ColorProfileFlags)reader.ReadWORD();
            GammaFixed        = reader.ReadDWORD();

            // Next 8 bytes are reserved
            reader.ReadBYTEs(8);

            // Do we need to do anything with color profile data?
            // For now, just keep on truckin'
            if (ColorProfileType == ColorProfileType.EmbeddedICC)
            {
                var length = (int)reader.ReadDWORD();
                reader.ReadBYTEs(length);
            }
        }
コード例 #8
0
        public AseSliceEntry(AseReader reader, SliceFlags flags)
        {
            FrameNumber = reader.ReadDWORD();
            OriginX     = reader.ReadLONG();
            OriginY     = reader.ReadLONG();
            Width       = reader.ReadDWORD();
            Height      = reader.ReadDWORD();

            if ((flags & SliceFlags.Is9PatchSlice) != 0)
            {
                CenterX      = reader.ReadLONG();
                CenterY      = reader.ReadLONG();
                CenterWidth  = reader.ReadDWORD();
                CenterHeight = reader.ReadDWORD();
            }

            if ((flags & SliceFlags.HasPivotInformation) != 0)
            {
                PivotX = reader.ReadLONG();
                PivotY = reader.ReadLONG();
            }
        }
コード例 #9
0
        public AseUserDataChunk(AseFrame frame, AseReader reader)
            : base(frame)
        {
            Flags = (UserDataFlags)reader.ReadDWORD();

            if ((Flags & UserDataFlags.HasText) != 0)
            {
                Text = reader.ReadSTRING();
            }

            if ((Flags & UserDataFlags.HasColor) != 0)
            {
                ColorRGBA = reader.ReadBYTEs(4);
            }

            // Place the user data in the last chunk
            if (reader.LastChunk != null)
            {
                reader.LastChunk.UserText  = Text;
                reader.LastChunk.UserColor = ColorRGBA;
            }
        }