0

我在这里的第一篇文章,所以这里是,

我有一个程序,我需要获取面板中像素的颜色,该面板包含一个 IE 浏览器,如下面的代码所示(我不能使用 webBrowser,因为它不会加载与 IE/Firefox 相同的某些网页(通常是java))

    Dim TheBrowser = New SHDocVw.InternetExplorer
    asd = TheBrowser.HWND
    fgh = Me.Panel2.Handle
    SetParent(asd, fgh)
    SendMessage(asd, WM_SYSCOMMAND, SC_MAXIMIZE, 0)

这个位工作正常,但是用户可以更改整个表单的不透明度,以便获得像素颜色,我发现如果我在表单上使用 DrawtoBitmap 它会忽略不透明度,所以我可以使用它来获取像素颜色,但是 drawtobitmap 是将面板的内容留空(我使用图片框来测试图像)

    Dim mybitmap As New Bitmap(Me.Width, Me.Height)
    Me.DrawToBitmap(mybitmap, Me.ClientRectangle)
    PictureBox1.BackgroundImage = mybitmap

表单及其所有按钮等在图片框上显示良好,但面板为空白(我都试图将面板转换为位图,但结果完全空白)。我是否将 IE 错误地链接到面板,或者只是 DrawtoPanel 无法正常工作?(我尝试使用 Printscreen,但正如预期的那样,它包括不透明度)。继承人我的 Sendmessage 和 Setparent 只是为了完整性。

<DllImport("user32.dll")> _
Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
End Function
 <DllImport("user32.dll")> _
Public Shared Function SetParent(ByVal HWNDChild As IntPtr, ByVal HWNDNewParent As IntPtr) As IntPtr
End Function

任何帮助将不胜感激,谢谢瑞恩

4

1 回答 1

0

解决了它,现在不需要 Drawtobitmap,之前尝试过,但是使用 IntPtr.Zero 设置了 GetWindowDC,它使用整个屏幕而不仅仅是窗体,因此包括窗口的背景颜色。

Dim hdc As IntPtr = GetWindowDC(Form2.Handle)
Dim pixel As UInteger = GetPixel(hdc, x - Form2.Top, y - Form2.Left)
Dim color As Color

ReleaseDC(Form2.Handle, hdc)
color = color.FromArgb(Int(pixel And &HFF), _
Int(pixel And &HFF00) >> 8, _
Int(pixel And &HFF0000) >> 16)

现在它不关心表单不透明度是否设置为 0,它仍然会在表单上找到颜色。

于 2013-07-19T08:07:54.077 回答