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

时间:2009-12-03 09:45:26

标签: 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);
//...

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

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

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

非常感谢!! 扬

1 个答案:

答案 0 :(得分:2)

我无法直接回答您的问题,但我遇到了类似的问题,我遇到了类似的问题:在阻碍Shell或Widget的屏幕截图从视图。

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

Image screenshot = new Image(shellB.getDisplay(), shellB.getBounds());
GC.copyArea(screenshot, 0, 0);

我的调查结果显示,这可以在Windows Vista,Windows 7和Mac OS X下完成(虽然我不确定后者)。但是,在Windows XP,使用GNOME的Linux和使用KDE的Linux下,屏幕截图包含一个白色区域,重叠窗口会阻挡视图。

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

我很高兴听到我不合时宜!