/// <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(); }
/// <summary> /// Initializes new instance using stream. /// </summary> /// <param name="input"> /// Input stream. /// </param> protected IFFNode(Stream input) { reader = new IFFReader(input); }
/// <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; } } }