コード例 #1
0
ファイル: ArcKAAS.cs プロジェクト: zxc120/GARbro
        public override IImageDecoder OpenImage(ArcFile arc, Entry entry)
        {
            byte pic_method = arc.File.View.ReadByte(entry.Offset);

            if (pic_method != 1 && pic_method != 2)
            {
                return(base.OpenImage(arc, entry));
            }
            var pent = (PdImageEntry)entry;

            byte[] baseline = null;
            var    dir      = arc.Dir as List <Entry>;

            for (int i = pent.Number - 1; i >= 0; --i)
            {
                var  base_entry  = dir[i];
                byte base_method = arc.File.View.ReadByte(base_entry.Offset);
                if (base_method != 1 && base_method != 2)
                {
                    PicMetaData base_info;
                    using (var base_input = arc.File.CreateStream(base_entry.Offset, base_entry.Size))
                    {
                        base_info = s_picFormat.Value.ReadMetaData(base_input) as PicMetaData;
                        if (null == base_info)
                        {
                            throw new InvalidFormatException();
                        }
                        using (var reader = new PicFormat.Reader(base_input, base_info))
                        {
                            reader.Unpack();
                            baseline = reader.Data;
                        }
                    }
                    var overlay_info = new PdOverlayMetaData {
                        Width      = base_info.Width,
                        Height     = base_info.Height,
                        BPP        = 24,
                        Method     = pic_method,
                        ChunkCount = arc.File.View.ReadInt32(pent.Offset + 4),
                    };
                    var input = arc.File.CreateStream(pent.Offset, pent.Size);
                    return(new PdOverlayImage(input, overlay_info, baseline));
                }
            }
            return(base.OpenImage(arc, entry)); // essentialy InvalidFormatException
        }
コード例 #2
0
ファイル: ArcKAAS.cs プロジェクト: zxc120/GARbro
 public PdOverlayImage(IBinaryStream input, PdOverlayMetaData info, byte[] baseline) : base(input, info)
 {
     m_method      = info.Method;
     m_chunk_count = info.ChunkCount;
     m_baseline    = baseline;
 }