public AseFrameTagEntry(AseReader reader) { FromFrame = reader.ReadWORD(); ToFrame = reader.ReadWORD(); LoopAnimationDirection = (LoopAnimationDirection)reader.ReadBYTE(); // Ignore next 8 bytes reader.ReadBYTEs(8); ColorRGB = reader.ReadBYTEs(3); // Ignore a byte reader.ReadBYTE(); Name = reader.ReadSTRING(); // "OneShot" loop hack if (Name.StartsWith("[") && Name.EndsWith("]")) { Name = Name.Remove(0, 1); Name = Name.Remove(Name.Length - 1, 1); IsOneShot = true; } else { IsOneShot = false; } }
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); }
public AsePaletteEntry(AseReader reader) { Flags = reader.ReadWORD(); Red = reader.ReadBYTE(); Green = reader.ReadBYTE(); Blue = reader.ReadBYTE(); Alpha = reader.ReadBYTE(); if (HasName) { Name = reader.ReadSTRING(); } }
public AseLayerChunk(AseFrame frame, AseReader reader) : base(frame) { Flags = (LayerChunkFlags)reader.ReadWORD(); Type = (LayerType)reader.ReadWORD(); ChildLevel = reader.ReadWORD(); // Ignore next two words reader.ReadWORD(); reader.ReadWORD(); BlendMode = (BlendMode)reader.ReadWORD(); Opacity = reader.ReadBYTE(); if ((frame.AseFile.Header.Flags & HeaderFlags.HasLayerOpacity) == 0) { // Assume full opacity Opacity = 255; } // Ignore next three bytes reader.ReadBYTEs(3); Name = reader.ReadSTRING(); }
public AseCelChunk(AseFrame frame, AseReader reader, int size) : base(frame) { // Keep track of read position var pos = reader.Position; LayerIndex = reader.ReadWORD(); PositionX = reader.ReadSHORT(); PositionY = reader.ReadSHORT(); Opacity = reader.ReadBYTE(); CelType = (CelType)reader.ReadWORD(); // Ignore next 7 bytes reader.ReadBYTEs(7); if (CelType == CelType.Raw) { Width = reader.ReadWORD(); Height = reader.ReadWORD(); var bytesRead = reader.Position - pos; PixelBytes = reader.ReadBYTEs(size - bytesRead); } else if (CelType == CelType.Linked) { FramePositionLink = reader.ReadWORD(); // Get a reference to our linked cell. It should be in a previous frame with a matching layer index. Debug.Assert(Frame.AseFile.Frames.Count > FramePositionLink); LinkedCel = Frame.AseFile.Frames[FramePositionLink].Chunks.OfType <AseCelChunk>().FirstOrDefault(c => c.LayerIndex == LayerIndex); Debug.Assert(LinkedCel != null); } else if (CelType == CelType.CompressedImage) { Width = reader.ReadWORD(); Height = reader.ReadWORD(); var bytesRead = reader.Position - pos; var compressed = reader.ReadBYTEs(size - bytesRead); PixelBytes = ZlibDeflate(compressed); } }