Esempio n. 1
0
        public static UserDataChunk Read(AsepriteStreamReader reader)
        {
            //DWORD Flags
            //  1 = Has text
            //  2 = Has color
            var flag = reader.DWORD();

            //+ If flags have bit 1
            //  STRING Text
            if (reader.FLAG(flag, 1))
            {
                return(new UserDataChunk(reader.STRING()));
            }
            //+If flags have bit 2
            //  BYTE Color Red(0 - 255)
            //  BYTE Color Green(0 - 255)
            //  BYTE Color Blue(0 - 255)
            //  BYTE Color Alpha(0 - 255)
            if (reader.FLAG(flag, 2))
            {
                return(new UserDataChunk(reader.BYTE(), reader.BYTE(), reader.BYTE(), reader.BYTE()));
            }

            return(new UserDataChunk());
        }
Esempio n. 2
0
        public static SliceKey Read(AsepriteStreamReader reader, int flag)
        {
            //   DWORD     Frame number(this slice is valid from
            //             this frame to the end of the animation)
            var frameNumber = reader.DWORD();
            //   LONG Slice X origin coordinate in the sprite
            var xOrigin = reader.LONG();
            //   LONG Slice Y origin coordinate in the sprite
            var yOrigin = reader.LONG();
            //   DWORD Slice width(can be 0 if this slice hidden in the
            //        animation from the given frame)
            var width = reader.DWORD();
            //   DWORD Slice height
            var height = reader.DWORD();

            long centerX = 0;
            long centerY = 0;
            long pivotX  = 0;
            long pivotY  = 0;

            uint centerWidth  = 0;
            uint centerHeight = 0;

            //     + If flags have bit 1
            if (reader.FLAG(flag, 1))
            {
                //         LONG Center X position(relative to slice bounds)
                centerX = reader.LONG();
                //         LONG Center Y position
                centerY = reader.LONG();
                //         DWORD Center width
                centerWidth = reader.DWORD();
                //         DWORD   Center height
                centerHeight = reader.DWORD();
            }
            //     + If flags have bit 2
            if (reader.FLAG(flag, 2))
            {
                //         LONG Pivot X position(relative to the slice origin)
                pivotX = reader.LONG();
                //         LONG Pivot Y position(relative to the slice origin)
                pivotY = reader.LONG();
            }

            return(new SliceKey(frameNumber, xOrigin, yOrigin, width, height, centerX, centerY, centerWidth, centerHeight, pivotX, pivotY));
        }
Esempio n. 3
0
        public static PaletteEntry Read(AsepriteStreamReader reader, string defaultName)
        {
            //   WORD Entry flags:
            //             1 = Has name
            bool hasName = reader.FLAG(reader.WORD(), 1);
            //   BYTE      Red(0 - 255)
            var r = reader.BYTE();
            //   BYTE Green(0 - 255)
            var g = reader.BYTE();
            //   BYTE Blue(0 - 255)
            var b = reader.BYTE();
            //   BYTE Alpha(0 - 255)
            var a = reader.BYTE();
            //   +If has name bit in entry flags
            //     STRING Color name
            var name = hasName
                ? reader.STRING()
                : defaultName;

            return(new PaletteEntry(r, g, b, a, name));
        }
Esempio n. 4
0
        public static Header Read(AsepriteStreamReader reader)
        {
            // DWORD       File size
            var fileSize = reader.DWORD();
            // WORD        Magic number (0xA5E0)
            var magicNumber = reader.WORD();

            if (magicNumber != 0xA5E0)
            {
                throw new System.Exception("Invalid Format");
            }
            // WORD        Frames
            var frames = reader.WORD();
            // WORD        Width in pixels
            var width = reader.WORD();
            // WORD        Height in pixels
            var height = reader.WORD();
            // WORD        Color depth (bits per pixel)
            //               32 bpp = RGBA
            //               16 bpp = Grayscale
            //               8 bpp = Indexed
            var colorDepth = (ColorDepth)reader.WORD();
            // DWORD       Flags:
            //               1 = Layer opacity has valid value
            var layerOpacityHasValidValue = reader.FLAG(reader.DWORD(), 1);

            // WORD        Speed (milliseconds between frame, like in FLC files)
            //             DEPRECATED: You should use the frame duration field
            //             from each frame header
            reader.WORD();
            // DWORD       Set be 0
            reader.DWORD();
            // DWORD       Set be 0
            reader.DWORD();
            // BYTE        Palette entry (index) which represent transparent color
            //             in all non-background layers (only for Indexed sprites).
            var transparentIndex = reader.BYTE();

            // BYTE[3]     Ignore these bytes
            reader.BYTES(3);
            // WORD        Number of colors (0 means 256 for old sprites)
            reader.WORD();
            // BYTE        Pixel width (pixel ratio is "pixel width/pixel height").
            //             If this or pixel height field is zero, pixel ratio is 1:1
            var pixelWidth = reader.BYTE();
            // BYTE        Pixel height
            var  pixelHeight = reader.BYTE();
            byte pixelRatio  = 1;

            if (pixelHeight > 0 && pixelWidth > 0)
            {
                pixelRatio = (byte)(pixelWidth / pixelHeight);
            }
            // SHORT       X position of the grid
            var xPos = reader.SHORT();
            // SHORT       Y position of the grid
            var yPos = reader.SHORT();
            // WORD        Grid width (zero if there is no grid, grid size
            //             is 16x16 on Aseprite by default)
            var gridWidth = reader.WORD();
            // WORD        Grid height (zero if there is no grid)
            var gridHeight = reader.WORD();

            // BYTE[84]    For future (set to zero)
            reader.BYTES(84);

            return(new Header(
                       fileSize,
                       frames,
                       width,
                       height,
                       colorDepth,
                       layerOpacityHasValidValue,
                       transparentIndex,
                       pixelWidth,
                       pixelHeight,
                       pixelRatio,
                       xPos,
                       yPos,
                       gridWidth,
                       gridHeight));
        }