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); }
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)); }
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); }
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); }
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; }