/// <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(); }
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); } }
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); }