Esempio n. 1
0
        private void WriteFrameInfo(List <WrittenImageInfo> imageInfos, GafFrameInfo info)
        {
            var header = new Structures.GafFrameInfo
            {
                Unknown2 = 0,
                Unknown3 = (uint)info.Unknown3, // Cavedog gafs sometimes have a value here but we don't know what it does.
            };

            if (info.ImageIndex.HasValue)
            {
                var imageInfo = imageInfos[info.ImageIndex.Value];
                header.LayerCount        = 0;
                header.OriginX           = (short)info.OriginX;
                header.OriginY           = (short)info.OriginY;
                header.Width             = (ushort)imageInfo.Width;
                header.Height            = (ushort)imageInfo.Height;
                header.Compressed        = true;
                header.TransparencyIndex = (byte)imageInfo.TransparencyIndex;
                header.PtrFrameData      = (uint)imageInfo.Pointer;
            }
            else
            {
                var rect = info.Layers.Select(layer => new Rect
                {
                    X      = -layer.OriginX,
                    Y      = -layer.OriginY,
                    Width  = imageInfos[layer.ImageIndex].Width,
                    Height = imageInfos[layer.ImageIndex].Height
                }).Aggregate(Rect.Merge);

                header.LayerCount        = (ushort)info.Layers.Count;
                header.OriginX           = (short)(-rect.X);
                header.OriginY           = (short)(-rect.Y);
                header.Width             = (ushort)rect.Width;
                header.Height            = (ushort)rect.Height;
                header.Compressed        = false;
                header.TransparencyIndex = 9;
                header.PtrFrameData      = (uint)(writer.BaseStream.Position + 24);
            }

            header.Write(writer);

            if (!info.ImageIndex.HasValue)
            {
                var startPos = writer.BaseStream.Position + (4 * info.Layers.Count);
                for (var i = 0; i < info.Layers.Count; ++i)
                {
                    writer.Write((uint)(startPos + (24 * i)));
                }
                var layerPointers = new List <long>();
                foreach (var layer in info.Layers)
                {
                    WriteLayerInfo(imageInfos, layer);
                }
            }
        }
Esempio n. 2
0
        private void WriteLayerInfo(List <WrittenImageInfo> imageInfos, GafLayerInfo info)
        {
            var imageInfo = imageInfos[info.ImageIndex];

            var header = new Structures.GafFrameInfo
            {
                OriginX  = (short)info.OriginX,
                OriginY  = (short)info.OriginY,
                Unknown2 = 0,
                Unknown3 = (uint)info.Unknown3, // Cavedog gafs sometimes have a value here but we don't know what it does.

                LayerCount        = 0,
                Width             = (ushort)imageInfo.Width,
                Height            = (ushort)imageInfo.Height,
                Compressed        = true,
                TransparencyIndex = (byte)imageInfo.TransparencyIndex,
                PtrFrameData      = (uint)imageInfo.Pointer,
            };

            header.Write(writer);
        }