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

            if (header[0] != 0 || header[1] != 0)
            {
                return(base.OpenImage(arc, entry));
            }
            header[0] = (byte)'B';
            header[1] = (byte)'M';
            Stream input = arc.File.CreateStream(entry.Offset + 2, entry.Size - 2);

            try
            {
                input = new PrefixStream(header, input);
                var bmp  = new BinaryStream(input, entry.Name);
                var info = ImageFormat.Bmp.ReadMetaData(bmp);
                if (null == info)
                {
                    throw new InvalidFormatException();
                }
                bmp.Position = 0;
                return(new ImageFormatDecoder(bmp, ImageFormat.Bmp, info));
            }
            catch
            {
                input.Dispose();
                throw;
            }
        }
コード例 #2
0
ファイル: AudioPAD.cs プロジェクト: zxc120/GARbro
        }                                                               // 'PAD'

        public override SoundInput TryOpen(IBinaryStream file)
        {
            var wav_header = file.ReadHeader(0x2c).ToArray();
            int pcm_size   = LittleEndian.ToInt32(wav_header, 0x28);
            int channels   = LittleEndian.ToUInt16(wav_header, 0x16);

            wav_header[0] = (byte)'R';
            wav_header[1] = (byte)'I';
            wav_header[2] = (byte)'F';
            wav_header[3] = (byte)'F';
            LittleEndian.Pack(pcm_size + 0x24, wav_header, 4);

            var decoder = new PadDecoder(file.AsStream, pcm_size, channels);

            decoder.Unpack();
            var data = new MemoryStream(decoder.Data, 0, pcm_size);
            var wav  = new PrefixStream(wav_header, data);

            try
            {
                return(new WaveInput(wav));
            }
            catch
            {
                wav.Dispose();
                throw;
            }
        }