Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
 internal void UpdateSize()
 {
     if (InfoChunk == null || SoundChunk == null || HydraChunk == null)
     {
         return;
     }
     _size = 4
             + InfoChunk.UpdateSize() + 8
             + SoundChunk.UpdateSize() + 8
             + HydraChunk.UpdateSize() + 8;
 }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
        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);
            }
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        /// <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);
        }