/// <summary> /// Builds the appropriate chunk for the ID /// </summary> /// <returns></returns> public static IFFChunk BuildIFFChunk(DjvuReader reader, DjvuDocument rootDocument, IFFChunk parent, ChunkTypes chunkType) { IFFChunk result = null; if (chunkType == ChunkTypes.Form) { result = new FormChunk(reader, parent, rootDocument); } else if (chunkType == ChunkTypes.Form_Djvm) { result = new DjvmChunk(reader, parent, rootDocument); } else if (chunkType == ChunkTypes.Form_Djvu) { result = new DjvuChunk(reader, parent, rootDocument); } else if (chunkType == ChunkTypes.Form_Djvi) { result = new DjviChunk(reader, parent, rootDocument); } else if (chunkType == ChunkTypes.Form_Thum) { result = new ThumChunk(reader, parent, rootDocument); } else if (chunkType == ChunkTypes.Dirm) { result = new DirmChunk(reader, parent, rootDocument); } else if (chunkType == ChunkTypes.Navm) { result = new NavmChunk(reader, parent, rootDocument); } else if (chunkType == ChunkTypes.Anta) { result = new AntaChunk(reader, parent, rootDocument); } else if (chunkType == ChunkTypes.Antz) { result = new AntzChunk(reader, parent, rootDocument); } else if (chunkType == ChunkTypes.Txta) { result = new TxtaChunk(reader, parent, rootDocument); } else if (chunkType == ChunkTypes.Txtz) { result = new TxtzChunk(reader, parent, rootDocument); } else if (chunkType == ChunkTypes.Djbz) { result = new DjbzChunk(reader, parent, rootDocument); } else if (chunkType == ChunkTypes.Sjbz) { result = new SjbzChunk(reader, parent, rootDocument); } else if (chunkType == ChunkTypes.FG44) { result = new FG44Chunk(reader, parent, rootDocument); } else if (chunkType == ChunkTypes.BG44) { result = new BG44Chunk(reader, parent, rootDocument); } else if (chunkType == ChunkTypes.TH44) { result = new TH44Chunk(reader, parent, rootDocument); } else if (chunkType == ChunkTypes.WMRM) { result = new WmrmChunk(reader, parent, rootDocument); } else if (chunkType == ChunkTypes.FGbz) { result = new FGbzChunk(reader, parent, rootDocument); } else if (chunkType == ChunkTypes.Info) { result = new InfoChunk(reader, parent, rootDocument); } else if (chunkType == ChunkTypes.Incl) { result = new InclChunk(reader, parent, rootDocument); } else if (chunkType == ChunkTypes.BGjp) { result = new BGjpChunk(reader, parent, rootDocument); } else if (chunkType == ChunkTypes.FGjp) { result = new FGjpChunk(reader, parent, rootDocument); } else if (chunkType == ChunkTypes.Smmr) { result = new SmmrChunk(reader, parent, rootDocument); } else { result = new UnknownChunk(reader, parent, rootDocument); } //Console.WriteLine(result); return(result); }
/// <summary> /// Gets a complete image for the page /// </summary> /// <returns></returns> public System.Drawing.Bitmap BuildPageImage() { int subsample = 1; if ( this.Info==null && Document.FormChunk.Children[0].ChunkID=="DJVU" && Document.FormChunk.Children[1] is InfoChunk ) this._info = (InfoChunk)Document.FormChunk.Children[1]; int width = Info.Width / subsample; int height = Info.Height / subsample; var map = GetMap(new GRect(0, 0, width, height), subsample, null); if (map == null) return new Bitmap(Info.Width, Info.Height); int[] pixels = new int[width * height]; map.FillRgbPixels(0, 0, width, height, pixels, 0, width); var image = ConvertDataToImage(pixels); if (IsInverted == true) { image = InvertImage(image); } return image; }