首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JOGL Applet在Win7下的屏幕截图

JOGL Applet在Win7下的屏幕截图
EN

Stack Overflow用户
提问于 2010-01-28 20:28:58
回答 4查看 1.5K关注 0票数 2

我正在尝试拍摄在浏览器中运行的applet的屏幕截图。该小程序使用JOGL (OpenGL for Java)来显示3D模型。(1)屏幕截图总是显示为黑色或white.The当前解决方案使用常见的GDI调用。没有运行OpenGL的小程序的屏幕截图也没问题。

在这里可以找到一些JOGL应用程序的例子,https://jogl-demos.dev.java.net/ (2)我想要实现的另一件事是在屏幕截图中实现可滚动区域。

我在互联网上找到了这段代码,除了上面提到的两个问题之外,它工作得很好。

代码语言:javascript
复制
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)  
EN

回答 4

Stack Overflow用户

发布于 2010-02-05 06:12:21

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

但是,我很抱歉,如果你真的想通过编程来调试你的特定问题,我对Python的了解还不够。

票数 0
EN

Stack Overflow用户

发布于 2010-02-17 20:28:23

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

代码语言:javascript
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2010-04-03 16:51:26

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2154448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档