Exemplo n.º 1
0
            public void Parse(Tags tags, BinaryReader reader, int size)
            {
                reader.BaseStream.Seek(tags.position, SeekOrigin.Begin);
                image_id_ = (int)reader.ReadUInt16();

                if ((int)tags.tag == (int)ObjectType.DefineBitsLossLess2)
                {
                    is_loss_less_ = true;

                    byte format = reader.ReadByte();
                    width_  = reader.ReadUInt16();
                    height_ = reader.ReadUInt16();

                    MemoryStream ms = new MemoryStream();

                    StreamUtil.Copy(reader.BaseStream, ms, size - 7);
                    ms.Seek(0, SeekOrigin.Begin);

                    ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream zis =
                        new ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream(ms);

                    MemoryStream ms2 = new MemoryStream();

                    byte[] b = new byte[1024];
                    int    s;
                    while ((s = zis.Read(b, 0, b.Length)) > 0)
                    {
                        ms2.Write(b, 0, s);
                    }
                    zis.Close();

                    ms2.Seek(0, SeekOrigin.Begin);
                    raw_data_ = new byte[ms2.Length];
                    ms2.Read(raw_data_, 0, raw_data_.Length);
                }
                else
                {
                    reader.BaseStream.Seek(tags.position, SeekOrigin.Begin);
                    image_id_ = (int)reader.ReadUInt16();
                    MemoryStream ms = new MemoryStream();
                    StreamUtil.Copy(reader.BaseStream, ms, size - 2);
                    image_ = new Bitmap(ms);
                }
            }
Exemplo n.º 2
0
        /// <summary>
        /// 解压字符串
        /// </summary>
        /// <param name="pBytes"></param>
        /// <returns></returns>
        public byte[] DeCompress(byte[] pBytes)
        {
            ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream mStream = new ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream(new MemoryStream(pBytes));
            MemoryStream mMemory = new MemoryStream();
            Int32        mSize;

            byte[] mWriteData = new byte[4096];
            while (true)
            {
                mSize = mStream.Read(mWriteData, 0, mWriteData.Length);
                if (mSize > 0)
                {
                    mMemory.Write(mWriteData, 0, mSize);
                }
                else
                {
                    break;
                }
            }
            mStream.Close();
            return(mMemory.ToArray());
        }
Exemplo n.º 3
0
        /// <summary>
        /// 解壓處理的byte陣列
        /// </summary>
        /// <param name="bytes">傳入要處理的byte陣列</param>
        /// <returns>回傳位元陣列</returns>
        public static byte[] DeCompress(byte[] bytes)
        {
            //使用壓縮的輸入資料流
            //使用memory資料流讀入要處理的byte陣列 來處理 解壓輸入處理資料
            ZipProc.Streams.InflaterInputStream stream = new ZipProc.Streams.InflaterInputStream(
             new MemoryStream(bytes));

            //開起記憶體空間資料流
            MemoryStream memory = new MemoryStream();

            //宣告byte陣列,預設為4k
            byte[] writeData = new byte[4096];

            int size;

            while (true)
            {
                //讀取解壓的輸入資料流 ,	並將結果放到byte陣列	,每次處理4K		
                size = stream.Read(writeData, 0, writeData.Length);

                if (size > 0)	//還有解壓資料,將資料放到memory 資料流
                    memory.Write(writeData, 0, size);
                else //無解縮資料,離開迴圈
                    break;
            }

            //關閉解壓輸入資料流			
            stream.Close();

            //回傳記憶體資料流內的陣列
            return memory.ToArray();
        }