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.
64 lines
2.6 KiB
C#
64 lines
2.6 KiB
C#
using System.IO;
|
|
|
|
|
|
namespace Aseprite
|
|
{
|
|
public enum ColorDepth : ushort
|
|
{
|
|
RGBA = 32,
|
|
Grayscale = 16,
|
|
Indexed = 8
|
|
}
|
|
|
|
public class Header
|
|
{
|
|
|
|
public uint FileSize { get; private set; }
|
|
public ushort MagicNumber { get; private set; }
|
|
public ushort Frames { get; private set; }
|
|
public ushort Width { get; private set; }
|
|
public ushort Height { get; private set; }
|
|
public ColorDepth ColorDepth { get; private set; }
|
|
public uint Flags { get; private set; }
|
|
public ushort Speed { get; private set; }
|
|
|
|
public byte TransparentIndex { get; private set; }
|
|
|
|
public ushort ColorCount { get; private set; }
|
|
public byte PixelWidth { get; private set; }
|
|
public byte PixelHeight { get; private set; }
|
|
|
|
public Header(byte[] header)
|
|
{
|
|
if (header.Length != 128)
|
|
return;
|
|
|
|
Stream stream = new MemoryStream(header);
|
|
BinaryReader reader = new BinaryReader(stream);
|
|
|
|
FileSize = reader.ReadUInt32(); // File size
|
|
MagicNumber = reader.ReadUInt16(); // Magic number (0xA5E0)
|
|
Frames = reader.ReadUInt16(); // Frames
|
|
Width = reader.ReadUInt16(); // Width in pixels
|
|
Height = reader.ReadUInt16(); // Height in pixels
|
|
ColorDepth = (ColorDepth)reader.ReadUInt16(); // Color depth (bits per pixel) [32 bpp = RGBA, 16 bpp = Grayscale, 8 bpp Indexed]
|
|
Flags = reader.ReadUInt32(); // Flags: 1 = Layer opacity has valid value
|
|
Speed = reader.ReadUInt16(); // Speed (milliseconds between frame, like in FLC files) DEPRECATED: You should use the frame duration field from each frame header
|
|
|
|
reader.ReadUInt32(); // Set be 0
|
|
reader.ReadUInt32(); // Set be 0
|
|
|
|
TransparentIndex = reader.ReadByte(); // Palette entry (index) which represent transparent color in all non-background layers (only for Indexed sprites)
|
|
|
|
reader.ReadBytes(3); // Ignore these bytes
|
|
|
|
ColorCount = reader.ReadUInt16(); // Number of colors (0 means 256 for old sprites)
|
|
PixelWidth = reader.ReadByte(); // Pixel width (pixel ratio is "pixel width/pixel height"). If pixel height field is zero, pixel ratio is 1:1
|
|
PixelHeight = reader.ReadByte(); // Pixel height
|
|
|
|
reader.ReadBytes(92); // For future
|
|
}
|
|
|
|
}
|
|
}
|