/// <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); }
internal void UpdateSize() { if (InfoChunk == null || SoundChunk == null || HydraChunk == null) { return; } _size = 4 + InfoChunk.UpdateSize() + 8 + SoundChunk.UpdateSize() + 8 + HydraChunk.UpdateSize() + 8; }
public void Save(string path) { using (var writer = new EndianBinaryWriter(File.Open(path, FileMode.Create))) { AddTerminals(); writer.Write("RIFF", 4); writer.Write(_size); writer.Write("sfbk", 4); InfoChunk.Write(writer); SoundChunk.Write(writer); HydraChunk.Write(writer); } }
public void Load(byte[] data) { int dataOffset = 0; var header = new Header(); header.Load(data, ref dataOffset); for (int i = 0; i < header.ChunkCount; i++) { BaseChunk baseChunk; //Read the first four bytes to get the tag. string tagName = FSHelpers.ReadString(data, dataOffset, 4); switch (tagName) { case "INF1": baseChunk = new InfoChunk(); Info = baseChunk as InfoChunk; break; case "VTX1": baseChunk = new VertexChunk(); Vertexes = baseChunk as VertexChunk; break; case "EVP1": baseChunk = new EnvelopeChunk(); Envelopes = baseChunk as EnvelopeChunk; break; case "DRW1": baseChunk = new DrawChunk(); Draw = baseChunk as DrawChunk; break; case "JNT1": baseChunk = new JointChunk(); Joints = baseChunk as JointChunk; break; case "SHP1": baseChunk = new ShapeChunk(); Shapes = baseChunk as ShapeChunk; break; case "TEX1": baseChunk = new TextureChunk(); Textures = baseChunk as TextureChunk; break; case "MAT3": baseChunk = new Material3Chunk(); Materials = baseChunk as Material3Chunk; break; case "ANK1": default: Console.WriteLine("Found unknown chunk {0}!", tagName); baseChunk = new DefaultChunk(); break; } baseChunk.Load(data, ref dataOffset); } }
public static IDjvuNode CreateEncodedDjvuNode(IDjvuWriter writer, IDjvuElement parent, ChunkType chunkType, long length) { IDjvuNode result = null; switch (chunkType) { case ChunkType.Djvm: result = new DjvmChunk(writer, parent, length); break; case ChunkType.Djvu: result = new DjvuChunk(writer, parent, length); break; case ChunkType.Djvi: result = new DjviChunk(writer, parent, length); break; case ChunkType.Thum: result = new ThumChunk(writer, parent, length); break; case ChunkType.Dirm: result = new DirmChunk(writer, parent, length); break; case ChunkType.Navm: result = new NavmChunk(writer, parent, length); break; case ChunkType.Anta: result = new AntaChunk(writer, parent, length); break; case ChunkType.Antz: result = new AntzChunk(writer, parent, length); break; case ChunkType.Txta: result = new TxtaChunk(writer, parent, length); break; case ChunkType.Txtz: result = new TxtzChunk(writer, parent, length); break; case ChunkType.Djbz: result = new DjbzChunk(writer, parent, length); break; case ChunkType.Sjbz: result = new SjbzChunk(writer, parent, length); break; case ChunkType.FG44: result = new FG44Chunk(writer, parent, length); break; case ChunkType.BG44: result = new BG44Chunk(writer, parent, length); break; case ChunkType.TH44: result = new TH44Chunk(writer, parent, length); break; case ChunkType.BM44: result = new BM44Chunk(writer, parent, length); break; case ChunkType.BM44Form: result = new BM44Form(writer, parent, length); break; case ChunkType.PM44: result = new PM44Chunk(writer, parent, length); break; case ChunkType.PM44Form: result = new PM44Form(writer, parent, length); break; case ChunkType.Wmrm: result = new WmrmChunk(writer, parent, length); break; case ChunkType.FGbz: result = new FGbzChunk(writer, parent, length); break; case ChunkType.Info: result = new InfoChunk(writer, parent, length); break; case ChunkType.Incl: result = new InclChunk(writer, parent, length); break; case ChunkType.BGjp: result = new BGjpChunk(writer, parent, length); break; case ChunkType.FGjp: result = new FGjpChunk(writer, parent, length); break; case ChunkType.Smmr: result = new SmmrChunk(writer, parent, length); break; default: throw new DjvuInvalidOperationException($"Chunk type is not supported in encoding. ChunkType: {chunkType}"); } return(result); }
/// <summary> /// Builds the appropriate chunk for the ID /// </summary> /// <returns></returns> public static IDjvuNode CreateDecodedDjvuNode(IDjvuReader reader, IDjvuDocument rootDocument, IDjvuElement parent, ChunkType chunkType, string chunkID = "", long length = 0) { IDjvuNode result = null; switch (chunkType) { case ChunkType.Djvm: result = new DjvmChunk(reader, parent, rootDocument, chunkID, length); break; case ChunkType.Djvu: result = new DjvuChunk(reader, parent, rootDocument, chunkID, length); break; case ChunkType.Djvi: result = new DjviChunk(reader, parent, rootDocument, chunkID, length); break; case ChunkType.Thum: result = new ThumChunk(reader, parent, rootDocument, chunkID, length); break; case ChunkType.Dirm: result = new DirmChunk(reader, parent, rootDocument, chunkID, length); break; case ChunkType.Navm: result = new NavmChunk(reader, parent, rootDocument, chunkID, length); break; case ChunkType.Anta: result = new AntaChunk(reader, parent, rootDocument, chunkID, length); break; case ChunkType.Antz: result = new AntzChunk(reader, parent, rootDocument, chunkID, length); break; case ChunkType.Txta: result = new TxtaChunk(reader, parent, rootDocument, chunkID, length); break; case ChunkType.Txtz: result = new TxtzChunk(reader, parent, rootDocument, chunkID, length); break; case ChunkType.Djbz: result = new DjbzChunk(reader, parent, rootDocument, chunkID, length); break; case ChunkType.Sjbz: result = new SjbzChunk(reader, parent, rootDocument, chunkID, length); break; case ChunkType.FG44: result = new FG44Chunk(reader, parent, rootDocument, chunkID, length); break; case ChunkType.BG44: result = new BG44Chunk(reader, parent, rootDocument, chunkID, length); break; case ChunkType.TH44: result = new TH44Chunk(reader, parent, rootDocument, chunkID, length); break; case ChunkType.BM44: result = new BM44Chunk(reader, parent, rootDocument, chunkID, length); break; case ChunkType.BM44Form: result = new BM44Form(reader, parent, rootDocument, chunkID, length); break; case ChunkType.PM44: result = new PM44Chunk(reader, parent, rootDocument, chunkID, length); break; case ChunkType.PM44Form: result = new PM44Form(reader, parent, rootDocument, chunkID, length); break; case ChunkType.Wmrm: result = new WmrmChunk(reader, parent, rootDocument, chunkID, length); break; case ChunkType.FGbz: result = new FGbzChunk(reader, parent, rootDocument, chunkID, length); break; case ChunkType.Info: result = new InfoChunk(reader, parent, rootDocument, chunkID, length); break; case ChunkType.Incl: result = new InclChunk(reader, parent, rootDocument, chunkID, length); break; case ChunkType.BGjp: result = new BGjpChunk(reader, parent, rootDocument, chunkID, length); break; case ChunkType.FGjp: result = new FGjpChunk(reader, parent, rootDocument, chunkID, length); break; case ChunkType.Smmr: result = new SmmrChunk(reader, parent, rootDocument, chunkID, length); break; case ChunkType.Cida: result = new CidaChunk(reader, parent, rootDocument, chunkID, length); break; default: result = new UnknownChunk(reader, parent, rootDocument, chunkID, length); break; } return(result); }