public void Capture(IStreamEncoder encoder) { if (!RetrieveFrame()) { return; } try { var mapSource = _captureDevice.ImmediateContext.MapSubresource(_desktopImageTexture, 0, MapMode.Read, MapFlags.None); try { // Get the desktop capture texture encoder.CodeImage(mapSource.DataPointer, PixelFormat.Format32bppArgb); } finally { _captureDevice.ImmediateContext.UnmapSubresource(_desktopImageTexture, 0); } } finally { ReleaseFrame(); } }
public void Capture(IStreamEncoder encoder) { using (var graphics = Graphics.FromImage(_currentImage)) { var deviceContext = graphics.GetHdc(); NativeMethods.BitBlt(deviceContext, 0, 0, _screenBounds.Width, _screenBounds.Height, _screenDeviceContext, _screenBounds.X, _screenBounds.Y, SRCCOPY); graphics.ReleaseHdc(deviceContext); var bitmapData = _currentImage.LockBits(new Rectangle(0, 0, _currentImage.Width, _currentImage.Height), ImageLockMode.ReadOnly, _currentImage.PixelFormat); try { encoder.CodeImage(bitmapData.Scan0, bitmapData.PixelFormat); } finally { _currentImage.UnlockBits(bitmapData); } } }