Exemple #1
0
        /// <summary>
        /// 保存位图到文件
        /// </summary>
        /// <param name="bitmapInfo">位图信息</param>
        /// <param name="bmpDataSize">位图数据大小</param>
        /// <param name="bitsPtr">位图地址</param>
        /// <param name="filePath">文件路径</param>
        public static void SaveBitmapToFile(Win32Types.BitmapInfo bitmapInfo, int bmpDataSize, IntPtr bitsPtr, string filePath)
        {
            var headerSize   = (int)bitmapInfo.bmiHeader.biSize;
            var headerBuffer = StructToBytes(bitmapInfo.bmiHeader, headerSize);

            var fileHeader     = new Win32Types.BitmapFileHeader();
            var fileHeaderSize = Marshal.SizeOf(fileHeader) + bitmapInfo.bmiHeader.biSize;

            fileHeader.bfType      = 0x4D42; //"BM"
            fileHeader.bfSize      = (uint)fileHeaderSize + (uint)bmpDataSize;
            fileHeader.bfOffBits   = (uint)fileHeaderSize;
            fileHeader.bfReserved1 = 0;
            fileHeader.bfReserved2 = 0;
            var fileHeaderBuffer = StructToBytes(fileHeader, Marshal.SizeOf(fileHeader));

            var dataBuffer = new byte[bmpDataSize];

            Marshal.Copy(bitsPtr, dataBuffer, 0, bmpDataSize);

            if (File.Exists(filePath))
            {
                File.Delete(filePath);
            }

            var file   = File.Open(filePath, FileMode.Create);
            var binary = new BinaryWriter(file);

            binary.Write(fileHeaderBuffer, 0, Marshal.SizeOf(fileHeader));
            binary.Write(headerBuffer, 0, headerSize);
            binary.Write(dataBuffer, 0, bmpDataSize);
            binary.Flush();

            file.Close();
            file.Dispose();
        }
Exemple #2
0
 private void OnCaptureDone(string captureName, IntPtr bitmapPtr, Win32Types.BitmapInfo bitmapInfo)
 {
     try
     {
         var image = Image.FromHbitmap(bitmapPtr);
         _syncContext.Post(OnCaptureDone1SafePost, image);
     }
     catch (Exception e)
     {
         Console.WriteLine(e.Message);
     }
 }
 private void OnCaptureDone(string captureName, IntPtr bitmapPtr, Win32Types.BitmapInfo bitmapInfo, bool b)
 {
     try
     {
         if (b)
         {
             var image = Image.FromHbitmap(bitmapPtr);
             _syncContext.Post(OnCaptureDone1SafePost, image);
         }
         else
         {
             mytext  += "窗口关闭或最小化\r\n已退出游戏\r\n";
             gamemode = false;
             RemoveCapture();
         }
     }
     catch (Exception e)
     {
         Console.WriteLine(e.Message);
     }
 }
Exemple #4
0
        protected override bool CommonInit()
        {
            //位图信息
            _bitmapInfo = new Win32Types.BitmapInfo {
                bmiHeader = new Win32Types.BitmapInfoHeader()
            };
            _bitmapInfo.bmiHeader.Init();
            _bitmapInfo.bmiHeader.biWidth       = WinClientRect.Width;
            _bitmapInfo.bmiHeader.biHeight      = WinClientRect.Height;
            _bitmapInfo.bmiHeader.biPlanes      = 1;
            _bitmapInfo.bmiHeader.biBitCount    = 24;
            _bitmapInfo.bmiHeader.biSizeImage   = (uint)(WinClientRect.Width * WinClientRect.Height);
            _bitmapInfo.bmiHeader.biCompression = (uint)Win32Consts.BitmapCompressionMode.BI_RGB;

            HScrDc  = Win32Funcs.GetWindowDcWrapper(HWnd);
            HMemDc  = Win32Funcs.CreateCompatibleDcWrapper(HScrDc);
            HBitmap = Win32Funcs.CreateDibSectionWrapper(HMemDc, ref _bitmapInfo,
                                                         (uint)Win32Consts.DibColorMode.DIB_RGB_COLORS,
                                                         out _bitsPtr, IntPtr.Zero, 0);
            HOldBitmap = Win32Funcs.SelectObjectWrapper(HMemDc, HBitmap);

            return(true);
        }