Пример #1
0
        internal JB2Image ReadCompressedImage()
        {
            using (IDjvuReader reader = Reader.CloneReaderToMemory(DataOffset, Length))
            {
                JB2Image          image = new JB2Image();
                JB2.JB2Dictionary includedDictionary = null;

                if (Parent is DjvuChunk djvuChunk)
                {
                    IReadOnlyList <InclChunk> includes = djvuChunk.IncludedItems;

                    if (includes?.Count > 0)
                    {
                        var includeIDs = includes
                                         .Where <InclChunk>(x => x.ChunkType == ChunkType.Incl);
                        var       root     = Document.RootForm as DjvmChunk;
                        DjbzChunk djbzItem = null;

                        foreach (InclChunk iChunk in includeIDs)
                        {
                            DirmComponent component = root?.Dirm.Components
                                                      .Where <DirmComponent>(x => x.ID == iChunk.IncludeID).FirstOrDefault();

                            var includeForm = root.Includes
                                              .FirstOrDefault <IDjviChunk>(x => x.DataOffset == (component.Offset + 12));

                            djbzItem = includeForm?.Children
                                       .FirstOrDefault(x => x.ChunkType == ChunkType.Djbz) as DjbzChunk;

                            if (djbzItem != null)
                            {
                                break;
                            }
                        }

                        includedDictionary = djbzItem?.ShapeDictionary;
                    }
                }

                image.Decode(reader, includedDictionary);

                return(image);
            }
        }
Пример #2
0
        /// <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);
        }