public bool CloseDevice() { if (!IsOpen) { return(true); } _isRuningCollect = false; IsOpen = false; _sourceImageBuffer = new byte[1920 * 1080 * 4]; return(VsNetImgScalerExSdk.ImgScalerEx_EndConvert(_handel) == 0); }
protected virtual void Dispose(bool disposing) { if (!disposedValue) { if (disposing) { _sourceImageBuffer = null; _newImageBuffer = null; CloseDevice(); } VsNetImgScalerExSdk.ImgScalerEx_FreeInstance(_handel); disposedValue = true; } }
public DesktopWindowCollector() { Name = "桌面窗口采集器"; ID = DateTime.Now.Millisecond; IsAvailable = true; _handel = VsNetImgScalerExSdk.ImgScalerEx_AllocInstance(); _bitmapInfo = new BitmapInfo(); _bitmapInfoHeader = new BitmapInfoHeader { Width = 1280, Height = 720, Compression = 842094169, BitCount = 32, Planes = 1 }; }
private void StartCollectImage() { while (_isRuningCollect) { VsNetGDI_CopyWndToBitmapSdk.GDI_GetWndWH(_windowHandle, ref _width, ref _height); _bufferSize = _width * _height * 4; if (_sourceImageBuffer.Length != _bufferSize) { _sourceImageBuffer = new byte[_bufferSize]; VsNetImgScalerExSdk.ImgScalerEx_EndConvert(_handel); VsNetImgScalerExSdk.ImgScalerEx_BeginConvert(_handel, _width, _height, 28, 1280, 720, 0, 0, 0, 0, 0); _newImageBuffer = new byte[1280 * 720 * 3 / 2]; } VsNetGDI_CopyWndToBitmapSdk.GDI_CopyWndToBitmap(_windowHandle, ref _sourceImageBuffer[0], ref _bitmapInfo); VsNetImgScalerExSdk.ImgScalerEx_Convert(_handel, ref _sourceImageBuffer[0], _sourceImageBuffer.Length, ref _newImageBuffer[0], _newImageBuffer.Length); Pushing(new VideoDeviceDataContext(_newImageBuffer.ToIntHandle(), _newImageBuffer.Length)); //TODO 应使用配置 Thread.Sleep(32); } }