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()); }
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)); }
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)); }
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)); }