ScreenshotData TakeScreenshotCore(NativeInterfaces.IViewObject rpViewObject) { const int BitCount = 24; var rEmbedElement = rpViewObject as HTMLEmbed; var rWidth = rEmbedElement.clientWidth; var rHeight = rEmbedElement.clientHeight; var rScreenDC = NativeMethods.User32.GetDC(IntPtr.Zero); var rHDC = NativeMethods.Gdi32.CreateCompatibleDC(rScreenDC); var rInfo = new NativeStructs.BITMAPINFO(); rInfo.bmiHeader.biSize = Marshal.SizeOf(typeof(NativeStructs.BITMAPINFOHEADER)); rInfo.bmiHeader.biWidth = rWidth; rInfo.bmiHeader.biHeight = rHeight; rInfo.bmiHeader.biBitCount = BitCount; rInfo.bmiHeader.biPlanes = 1; IntPtr rBits; var rHBitmap = NativeMethods.Gdi32.CreateDIBSection(rHDC, ref rInfo, 0, out rBits, IntPtr.Zero, 0); var rOldObject = NativeMethods.Gdi32.SelectObject(rHDC, rHBitmap); var rTargetDevice = new NativeStructs.DVTARGETDEVICE() { tdSize = 0 }; var rRect = new NativeStructs.RECT(0, 0, rWidth, rHeight); var rEmptyRect = default(NativeStructs.RECT); rpViewObject.Draw(1, 0, IntPtr.Zero, ref rTargetDevice, IntPtr.Zero, rHDC, ref rRect, ref rEmptyRect, IntPtr.Zero, IntPtr.Zero); var rResult = new ScreenshotData(rWidth, rHeight, BitCount); var rPixels = new byte[rWidth * rHeight * 3]; Marshal.Copy(rBits, rPixels, 0, rPixels.Length); rResult.BitmapData = rPixels; NativeMethods.Gdi32.SelectObject(rHDC, rOldObject); NativeMethods.Gdi32.DeleteObject(rHBitmap); NativeMethods.Gdi32.DeleteDC(rHDC); NativeMethods.User32.ReleaseDC(IntPtr.Zero, rScreenDC); return(rResult); }
ScreenshotData TakeScreenshotCore(NativeInterfaces.IViewObject rpViewObject) { const int BitCount = 24; var rEmbedElement = rpViewObject as HTMLEmbed; var rWidth = rEmbedElement.clientWidth; var rHeight = rEmbedElement.clientHeight; var rScreenDC = NativeMethods.User32.GetDC(IntPtr.Zero); var rHDC = NativeMethods.Gdi32.CreateCompatibleDC(rScreenDC); var rInfo = new NativeStructs.BITMAPINFO(); rInfo.bmiHeader.biSize = Marshal.SizeOf(typeof(NativeStructs.BITMAPINFOHEADER)); rInfo.bmiHeader.biWidth = rWidth; rInfo.bmiHeader.biHeight = rHeight; rInfo.bmiHeader.biBitCount = BitCount; rInfo.bmiHeader.biPlanes = 1; IntPtr rBits; var rHBitmap = NativeMethods.Gdi32.CreateDIBSection(rHDC, ref rInfo, 0, out rBits, IntPtr.Zero, 0); var rOldObject = NativeMethods.Gdi32.SelectObject(rHDC, rHBitmap); var rTargetDevice = new NativeStructs.DVTARGETDEVICE() { tdSize = 0 }; var rRect = new NativeStructs.RECT(0, 0, rWidth, rHeight); var rEmptyRect = default(NativeStructs.RECT); rpViewObject.Draw(1, 0, IntPtr.Zero, ref rTargetDevice, IntPtr.Zero, rHDC, ref rRect, ref rEmptyRect, IntPtr.Zero, IntPtr.Zero); var rResult = new ScreenshotData(rWidth, rHeight, BitCount); var rPixels = new byte[rWidth * rHeight * 3]; Marshal.Copy(rBits, rPixels, 0, rPixels.Length); rResult.BitmapData = rPixels; NativeMethods.Gdi32.SelectObject(rHDC, rOldObject); NativeMethods.Gdi32.DeleteObject(rHBitmap); NativeMethods.Gdi32.DeleteDC(rHDC); NativeMethods.User32.ReleaseDC(IntPtr.Zero, rScreenDC); return rResult; }