Пример #1
0
        public static ThumbsFile read(StreamAccessor accessor)
        {
            ThumbsFile     r    = new ThumbsFile();
            Riff::RiffFile riff = Riff::RiffFile.FromStream(accessor.Stream, true);
            StreamAccessor ac;

            foreach (Riff::Chunk chunk in riff.EnumerateChunksByName("head"))
            {
                ac = new StreamAccessor(chunk.Stream);
                if (VERSION != ac.ReadInt32(EncodingType.I4))
                {
                    throw new System.ApplicationException("ファイルフォーマットの version が異なります。");
                }
                break;
            }

            foreach (Riff::Chunk chunk in riff.EnumerateChunksByName("thms"))
            {
                r.thumbs = chunk.GetContent <ImageCollection>();
                break;
            }

            foreach (Riff::Chunk chunk in riff.EnumerateChunksByName("dirs"))
            {
                ac     = new StreamAccessor(chunk.Stream);
                r.dirs = ac.Read <DirectoryCollection>();
                break;
            }
            riff.Close();

            r.read_initialize();
            return(r);
        }
Пример #2
0
        private int ReadTagHeader(StreamAccessor accessor, out bool unsync)
        {
            const string DIFF_VERSION = @"読み込もうとしている ID3 タグの版は 2.{0}.{1}です。 
この関数では 2.3.0 の読み取りにしか対応していません。";

            //-------------------------------------------------------

            if (accessor.ReadString(EncodingType.CC3) != "ID3")
            {
                throw new FileFormatException("読み込もうとしているバイナリストリームは ID3 タグではありません。");
            }

            byte minor    = accessor.ReadByte(EncodingType.U1);
            byte revision = accessor.ReadByte(EncodingType.U1);

            if (minor != 3 || revision != 0)
            {
                throw new FileFormatException(string.Format(DIFF_VERSION, minor, revision));
            }

            byte flags = accessor.ReadByte(EncodingType.U1);

            unsync            = (flags & 0x80) != 0;
            this.has_ext      = (flags & 0x40) != 0;
            this.experimental = (flags & 0x20) != 0;

            return(accessor.ReadInt32(EncodingType.Int28BE));
        }
Пример #3
0
        private static ImageDirectory read(StreamAccessor accessor)
        {
            ImageDirectory dir = new ImageDirectory(accessor.ReadString(EncodingType.NoSpecified));

            uint count = accessor.ReadUInt32(EncodingType.U4);

            for (int i = 0; i < count; i++)
            {
                dir.images.Add(accessor.ReadInt32(EncodingType.I4));
            }

            dir.dirs = accessor.Read <DirectoryCollection>();
            return(dir);
        }
Пример #4
0
        private static ImageCollection read_chunk(StreamAccessor accessor)
        {
            int             c   = accessor.ReadInt32(EncodingType.I4);
            ImageCollection ret = new ImageCollection(c);

            ret.count = c;
            try{
                while (accessor.RestLength > 0)
                {
                    ret.register(accessor.Read <Thumb>());
                }
            }catch (System.Exception e) {
                afh.File.__dll__.log.WriteError(e, "ImageCollection 読み取り中のエラー");
            }
            return(ret);
        }
Пример #5
0
        private void ReadExtHeader(StreamAccessor accessor, out uint crc32, out int padding)
        {
            uint num = accessor.ReadUInt32(EncodingType.U4BE);

            if ((num != 6) && (num != 10))
            {
                throw new FileFormatException("Extended Header Size は 6B 亦は 10B で在るべきです。");
            }
            ushort num2 = accessor.ReadUInt16(EncodingType.I2BE);

            this.hascrc = (num2 & 0x8000) != 0;
            if (num != (this.hascrc ? ((long)10) : ((long)6)))
            {
                throw new FileFormatException(string.Format("Extended Header Size の大きさが不正です。\r\nCRC Checkを{0}場合には{1}B であるべきです。", this.hascrc ? "行う" : "行わない", this.hascrc ? "10" : "6"));
            }
            padding = accessor.ReadInt32(EncodingType.U4BE);
            crc32   = this.hascrc ? accessor.ReadUInt32(EncodingType.U4BE) : 0;
        }