Exemple #1
0
        /// <summary>
        /// 保存到文件
        /// -----------------------------------------------------------------
        /// BITMAP FILE FORMAT
        ///   0  'B','M'
        ///   2  uint count = 4 bytes
        ///   6  Bitmap type :
        ///               0 = int record list
        ///               1 = uint bitmap
        ///               2 = rec# indexes
        ///   7  '0'
        ///   8  uint data
        /// -----------------------------------------------------------------
        /// </summary>
        /// <param name="bmp"></param>
        /// <returns>文件中的位置</returns>
        private long SaveBitmapToFile(WAHBitArray bmp)
        {
            long off = _lastBitmapOffset;

            WAHBitArray.TYPE t;
            uint[]           bits = bmp.GetCompressed(out t);

            byte[] b = new byte[bits.Length * 4 + 8];
            // write header data
            b[0] = ((byte)'B');
            b[1] = ((byte)'M');
            Buffer.BlockCopy(Helper.GetBytes(bits.Length, false), 0, b, 2, 4);

            b[6] = (byte)t;
            b[7] = (byte)(0);

            for (int i = 0; i < bits.Length; i++)
            {
                byte[] u = Helper.GetBytes((int)bits[i], false);
                Buffer.BlockCopy(u, 0, b, i * 4 + 8, 4);
            }
            _bitmapFileWrite.Write(b, 0, b.Length);
            _lastBitmapOffset += b.Length;
            return(off);
        }
Exemple #2
0
 private void WriteFreeListBMPFile(string filename)
 {
     if (_freeList != null)
     {
         WAHBitArray.TYPE t;
         uint[]           ints = _freeList.GetCompressed(out t);
         MemoryStream     ms   = new MemoryStream();
         BinaryWriter     bw   = new BinaryWriter(ms);
         bw.Write((byte)t);// write new format with the data type byte
         foreach (var i in ints)
         {
             bw.Write(i);
         }
         File.WriteAllBytes(filename, ms.ToArray());
     }
 }
Exemple #3
0
 private void WriteFile()
 {
     lock (_lock)
     {
         WAHBitArray.TYPE t;
         uint[]           ints = _bits.GetCompressed(out t);
         MemoryStream     ms   = new MemoryStream();
         BinaryWriter     bw   = new BinaryWriter(ms);
         bw.Write((byte)t);// write new format with the data type byte
         foreach (var i in ints)
         {
             bw.Write(i);
         }
         bw.Flush();
         File.WriteAllBytes(_path + _filename, ms.ToArray());
     }
 }