Ejemplo n.º 1
0
 private void ReadATTRChunk(IFFReader iff, ChunkAttributes attr)
 {
     Version  = iff.ReadInt32();
     Width    = iff.ReadInt32();
     Height   = iff.ReadInt32();
     DataSize = iff.ReadInt32();
 }
Ejemplo n.º 2
0
 /// <summary>
 /// Reads range from IFF stream.
 /// </summary>
 public ColorRange(IFFReader reader) : this()
 {
     pad1  = reader.ReadInt16();
     Rate  = reader.ReadInt16();
     Flags = (ColorRangeFlags)reader.ReadInt16();
     Low   = reader.ReadByte();
     High  = reader.ReadByte();
 }
Ejemplo n.º 3
0
        public static Image Read(IFFReader iff)
        {
            var image = new Image();

            iff.AddHandler(Chunks.Name, ChunkType.Default, image.ReadNAMEChunk);
            iff.AddHandler(Chunks.Attributes, ChunkType.Default, image.ReadATTRChunk);
            iff.AddHandler(Chunks.Data, ChunkType.Default, image.ReadDATAChunk);
            iff.Parse();
            return(image);
        }
Ejemplo n.º 4
0
        public static Typeface Read(IFFReader iff)
        {
            var typeface = new Typeface();

            iff.AddHandler(Chunks.Name, ChunkType.Default, typeface.ReadNAMEChunk);
            iff.AddHandler(Chunks.Attributes, ChunkType.Default, typeface.ReadATTRChunk);

            iff.AddHandler(Chunks.Image, ChunkType.Form, typeface.ReadIMAGChunk);
            iff.AddHandler(Chunks.Glyph, ChunkType.Default, typeface.ReadGLPHChunk);

            iff.Parse();
            return(typeface);
        }
Ejemplo n.º 5
0
        public static Glyph Read(IFFReader iff)
        {
            var glyph = new Glyph
            {
                Character    = Encoding.Unicode.GetChars(iff.ReadBytes(2))[0],
                ImageIndex   = iff.ReadInt32(),
                LeftMargin   = iff.ReadInt32(),
                TopMargin    = iff.ReadInt32(),
                Width        = iff.ReadInt32(),
                Height       = iff.ReadInt32(),
                BitmapLeft   = iff.ReadSingle(),
                BitmapRight  = iff.ReadSingle(),
                AdvanceX     = iff.ReadSingle(),
                BitmapTop    = iff.ReadSingle(),
                Baseline     = iff.ReadSingle(),
                BitmapBottom = iff.ReadSingle(),
                Zero         = iff.ReadByte()
            };

            return(glyph);
        }
Ejemplo n.º 6
0
 private void ReadGLPHChunk(IFFReader iff, ChunkAttributes attr)
 {
     _glyphs.Add(Glyph.Read(iff));
 }
Ejemplo n.º 7
0
 private void ReadIMAGChunk(IFFReader iff, ChunkAttributes attr)
 {
     _images.Add(Image.Read(iff));
 }
Ejemplo n.º 8
0
 private void ReadATTRChunk(IFFReader iff, ChunkAttributes attr)
 {
     Attributes = iff.ReadString();
 }
Ejemplo n.º 9
0
 private void ReadNAMEChunk(IFFReader iff, ChunkAttributes attr)
 {
     Name = iff.ReadString();
 }
Ejemplo n.º 10
0
        /// <param name="stream">
        /// Stream containing ILBM image data.
        /// </param>
        public ILBMImage(Stream stream)
        {
            //BinaryReader reader = new BinaryReader(stream, Encoding.ASCII);
            //ReadNext(reader);

            IFFReader reader = new IFFReader(stream);
            var       file   = reader.ReadFileHeader();

            if (file.FormatID != "PBM ")
            {
                throw new NotSupportedException("This is not supported IBLM file.");
            }

            foreach (IFFChunk chunk in reader.ReadAll())
            {
                switch (chunk.TypeID)
                {
                case "BMHD":
                    Width       = reader.ReadInt16();
                    Height      = reader.ReadInt16();
                    PosX        = reader.ReadInt16();
                    PosY        = reader.ReadInt16();
                    NumPlanes   = reader.ReadByte();
                    Mask        = reader.ReadByte();
                    Compression = reader.ReadByte();
                    Padding     = reader.ReadByte();
                    Transparent = reader.ReadInt16();
                    AspectRatio = reader.ReadInt16();
                    PageWidth   = reader.ReadInt16();
                    PageHeight  = reader.ReadInt16();
                    break;

                case "CMAP":
                    Color[] pal = new Color[chunk.Length / 3];
                    for (int i = 0; i < pal.Length; i++)
                    {
                        byte R = reader.ReadByte();
                        byte G = reader.ReadByte();
                        byte B = reader.ReadByte();
                        pal[i] = Color.FromArgb(R, G, B);
                    }
                    Palette = ImagePalette.Create(pal);
                    break;

                case "GRAB":
                    HotspotX = reader.ReadInt16();
                    HotspotY = reader.ReadInt16();
                    break;

                case "CRNG":
                    if (ColorRanges == null)
                    {
                        ColorRanges = new List <ColorRange>();
                    }
                    ColorRanges.Add(new ColorRange(reader));
                    break;

                case "TINY":
                    short  width  = reader.ReadInt16();
                    short  height = reader.ReadInt16();
                    byte[] tiny;
                    if (Compression == 1)
                    {
                        tiny = reader.ReadUnpack(chunk.Length - 4);
                    }
                    else
                    {
                        tiny = reader.ReadBytes(chunk.Length - 4);
                    }
                    Tiny = new TinyImage(width, height, tiny);
                    break;

                case "BODY":
                    if (Compression == 1)
                    {
                        ImageData = reader.ReadUnpack(chunk.Length);
                    }
                    else
                    {
                        ImageData = reader.ReadBytes(chunk.Length);
                    }
                    break;
                }
            }
        }
Ejemplo n.º 11
0
 private void ReadDATAChunk(IFFReader iff, ChunkAttributes attr)
 {
     Data = iff.ReadBytes(attr.Size);
 }