SWT:如何在后台"渲染"Widget到屏幕外缓冲区

jan*_*jan 6 swt widget

我非常感谢您的建议和帮助:

如何在BACKGROUND(offscreenbuffer?)中渲染SWT窗口小部件/组件并获取由窗口小部件/组件绘制的"绘制"像素以将其保存在硬盘上:

我现在拥有的是:

Display display = new Display();
Shell shell = new Shell(display);
// ...  
MyWidgetComponent mwc = new MyWidgetComponent(shell, SWT.BORDER); 
shell.open();
Image screenshot = new Image(shell.getDisplay(), shell.getBounds());
GC.copyArea(screenshot, 0, 0);
//...
Run Code Online (Sandbox Code Playgroud)

问题:获取shell/widget的截​​图本身可行,但它会在任务栏中打开一个新窗口.这是我不想要的.

我想要实现的是:我想在后台完全运行这个应用程序作为"服务器应用程序"(例如嵌入并将其调用到servlet中).所以MyWidgetComponent应该在屏幕缓冲区中完全逐像素地渲染,之后我检索像素并将它们保存到硬盘中,或者直接将渲染的小部件作为servlet请求的结果返回.(我不想在服务器环境中弹出任何窗口,以防这可能是Windows服务器...).

我怎样才能做到这一点.我搜索了很多,但没有找到任何有用的东西.

非常感谢你!!一月

Pau*_*sma 2

我无法直接回答你的问题,但我遇到了一个类似的问题,我一直在努力解决:在视图被遮挡Shell时截取屏幕截图。Widget

例如,考虑与Awindow 重叠的window B。屏幕截图是B使用您的代码制作的:

Image screenshot = new Image(shellB.getDisplay(), shellB.getBounds());
GC.copyArea(screenshot, 0, 0);
Run Code Online (Sandbox Code Playgroud)

我的发现表明这可以在 Windows Vista、Windows 7 和 Mac OS X 下完成(尽管我不确定后者)。然而,在 Windows XP、带有 GNOME 的 Linux 和带有 KDE 的 Linux 下,屏幕截图包含一个白色区域,重叠的窗口遮挡了视图。

我还没有找到解决方案,我怀疑这种行为不仅依赖于平台,而且在 SWT 中也有相当多的错误。

不过,我很想听听我说的不对!