我非常感谢您的建议和帮助:
如何在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服务器......)。
我怎样才能做到这一点。我搜索了很多,但没有找到任何有用的东西。
非常感谢!! 扬
答案 0 :(得分:2)
我无法直接回答您的问题,但我遇到了类似的问题,我遇到了类似的问题:在阻碍1}}时截取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中也存在相当错误。
我很高兴听到我不合时宜!