下面是我添加了CefSharp組件中的ChromiumWebBrowser,在我實際運行的表單上是顯示這個控制元件的,但是我截取的form圖中不顯示這個瀏覽器控制元件,我修改了下它的一些背景色、邊框線都能顯示出來,不知道為什么。求大神幫忙看一下,這個問題困擾了我好久了QWQ
其實我的需求是單獨截取瀏覽器的截圖,一開始截取下來的瀏覽器截圖是空白的,找不到問題才有了下面的測驗
截取的form圖:

實際運行的表單:

代碼:
private static ChromiumWebBrowser browser = new ChromiumWebBrowser("http://www.baidu.com");
private void Form2_Load(object sender, EventArgs e)
{
browser.FrameLoadEnd += new EventHandler<FrameLoadEndEventArgs>(browser_FrameLoadEnd);
browser.Visible = true;
browser.Dock = DockStyle.Fill;
groupBox1.Controls.Add(browser);
}
private void browser_FrameLoadEnd(object obj, EventArgs e)
{
int width = this.Width;
int height = this.Height;
Bitmap bitmap = new Bitmap(width, height); // 創建畫布大小
Rectangle rectangle = new Rectangle(0, 0, width, height); // 繪圖區域
browser.DrawToBitmap(bitmap, rectangle);
bitmap.Save("D:\\test.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
}
uj5u.com熱心網友回復:
大神在哪QWQuj5u.com熱心網友回復:
這么大的論壇沒有懂的嗎uj5u.com熱心網友回復:
GG.........uj5u.com熱心網友回復:
private void button1_Click(object sender, EventArgs e){
Graphics g = this.CreateGraphics();
Size s = this.Size;
Bitmap image = new Bitmap(s.Width, s.Height, g);
Graphics g2 = Graphics.FromImage(image);
g2.CopyFromScreen(this.Location.X, this.Location.Y, 0, 0, s);
g2.DrawImage(image, 0, 0);
image.Save("a.jpg");
}
uj5u.com熱心網友回復:
我需要控制元件在不可見的情況下對網頁進行截圖,這個實作不了的
uj5u.com熱心網友回復:
好的,搞出來后通知一聲。
uj5u.com熱心網友回復:
browser.Visible=true提到前面去試試,另外截圖方法用點擊事件除錯比較好點吧uj5u.com熱心網友回復:
實話說,cefsharp是不讓你截圖的,截毛線。uj5u.com熱心網友回復:
沒整明白,控制元件不可見?那個控制元件不可見?是瀏覽器控制元件不可見嗎?不可見又怎么截圖啊?
uj5u.com熱心網友回復:
webBrowser 轉圖片
class NativeMethods
{
[ComImport]
[Guid("0000010D-0000-0000-C000-000000000046")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface IViewObject
{
void Draw([MarshalAs(UnmanagedType.U4)] uint dwAspect, int lindex, IntPtr pvAspect, [In] IntPtr ptd, IntPtr hdcTargetDev, IntPtr hdcDraw, [MarshalAs(UnmanagedType.Struct)] ref RECT lprcBounds, [In] IntPtr lprcWBounds, IntPtr pfnContinue, [MarshalAs(UnmanagedType.U4)] uint dwContinue);
}
[StructLayout(LayoutKind.Sequential, Pack = 4)]
struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}
public static void GetImage(object obj, Image destination, Color backgroundColor)
{
using (Graphics graphics = Graphics.FromImage(destination))
{
IntPtr deviceContextHandle = IntPtr.Zero;
RECT rectangle = new RECT();
rectangle.Right = destination.Width;
rectangle.Bottom = destination.Height;
graphics.Clear(backgroundColor);
try
{
deviceContextHandle = graphics.GetHdc();
IViewObject viewObject = obj as IViewObject;
viewObject.Draw(1, -1, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, deviceContextHandle, ref rectangle, IntPtr.Zero, IntPtr.Zero, 0);
}
finally
{
if (deviceContextHandle != IntPtr.Zero)
{
graphics.ReleaseHdc(deviceContextHandle);
}
}
}
}
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
Bitmap screenshot = new Bitmap(webBrowser1.Width, webBrowser1.Height);
NativeMethods.GetImage(webBrowser1.ActiveXInstance, screenshot, Color.White);
// 保存圖片
screenshot.Save(@"F:\h11.png");
}
uj5u.com熱心網友回復:
沒加載完你就切圖,肯定是空白,你停過幾秒再切看。uj5u.com熱心網友回復:
Thank you : )
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/41581.html
標籤:C#
