JOGL应用程序Win7下的截屏

2024-05-21 23:27:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试拍摄一个运行在 浏览器。applet正在使用JOGL(openglforjava)来显示3D 模型。(1) 屏幕截图总是显示为黑色或白色。那个 当前的解决方案使用通常的GDI调用。小程序的屏幕截图 运行OpenGL很好。
在这里可以找到一些JOGL应用程序的例子https://jogl-demos.dev.java.net/ (2) 另一件事我试图实现的是获得可滚动区域 屏幕截图里面也有。在

我在网上找到了这个代码,除了2 上述问题。在

import win32gui as wg  
import win32ui as wu  
import win32con  

def copyBitMap(hWnd, fname):  
    wg.SetForegroundWindow(hWnd)  
    cWnd = wu.CreateWindowFromHandle(hWnd)  
    rect = cWnd.GetClientRect()  
    (x,y) = (rect[2] - rect[0], rect[3] - rect[1])  
    hsrccDc = wg.GetDC(hWnd)  
    hdestcDc = wg.CreateCompatibleDC(hsrccDc)  
    hdestcBm = wg.CreateCompatibleBitmap(hsrccDc, x, y)  
    wg.SelectObject(hdestcDc, hdestcBm.handle)  
    wg.BitBlt(hdestcDc, 0, 0, x, y, hsrccDc, rect[0], rect[1], win32con.SRCCOPY)  
    destcDc = wu.CreateDCFromHandle(hdestcDc)  
    bmp = wu.CreateBitmapFromHandle(hdestcBm.handle)  
    bmp.SaveBitmapFile(destcDc, fname)  

Tags: rectimportcwnd屏幕asfnamehandlewg
3条回答

在某些情况下,获取OpenGL窗口可能相当困难,因为OpenGL是由GPU直接渲染到其帧缓冲区中的。这同样适用于DirectX窗口和视频覆盖窗口。在

除非你想让它自动化,否则我只会使用一个Firefox扩展。有许多从a search for "screenshot"返回的命令可以截图整个浏览器页面,包括可滚动区域:

但是,我很抱歉,如果您确实想用编程的方式来调试您的特定问题,我对Python的了解还不够。在

这里有一种方法,在截屏前禁用dwm(桌面窗口管理器)组合,但这会导致整个屏幕在启用/禁用时闪烁。在

from ctypes import WinDLL
from time import sleep  
import win32gui as wg  
import win32ui as wu  
import win32con  

def copyBitMap(hWnd, fname):  
    dwm = WinDLL("dwmapi.dll")
    dwm.DwmEnableComposition(0)

    wg.SetForegroundWindow(hWnd)
    # Give the window sometime to redraw itself
    sleep(2)
    cWnd = wu.CreateWindowFromHandle(hWnd)
    rect = cWnd.GetClientRect()
    (x,y) = (rect[2] - rect[0], rect[3] - rect[1])
    hsrccDc = wg.GetDC(hWnd)
    hdestcDc = wg.CreateCompatibleDC(hsrccDc)
    hdestcBm = wg.CreateCompatibleBitmap(hsrccDc, x, y)
    wg.SelectObject(hdestcDc, hdestcBm.handle)
    wg.BitBlt(hdestcDc, 0, 0, x, y, hsrccDc, rect[0], rect[1], win32con.SRCCOPY)
    destcDc = wu.CreateDCFromHandle(hdestcDc)
    bmp = wu.CreateBitmapFromHandle(hdestcBm.handle)
    bmp.SaveBitmapFile(destcDc, fname)

    dwm.DwmEnableComposition(1)

相关问题 更多 >