SWT: Как «визуализировать» виджет в фоновом режиме / в экранный буфер - PullRequest
6 голосов
/ 03 декабря 2009

Буду очень признателен за ваш совет и помощь:

Как я могу визуализировать виджет / компонент SWT в фоновом режиме (offscreenbuffer?) И получить «нарисованные» пиксели, которые были нарисованы виджетом / компонентом, чтобы сохранить их на жестком диске:

Что у меня сейчас есть:

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

Проблема: Создание самого скриншота оболочки / виджета работает, но при этом откроется новое окно на панели задач. Это то, чего я НЕ хочу.

То, чего я хочу достичь, это: Я хочу запустить это приложение полностью в фоновом режиме как «серверное приложение» (например, встраивать и вызывать его в сервлете). Таким образом, MyWidgetComponent должен отображаться пиксель за пикселем полностью во внешнем буфере, и позже я получаю пиксели и сохраняю их на жесткий диск или напрямую возвращаю визуализированный виджет как изображение как результат запроса сервлета. (Я не хочу открывать какие-либо окна в серверной среде, в случае, если это может быть сервер Windows ...).

Как мне этого добиться. Я много искал, но ничего полезного не нашел.

Большое спасибо! Jan

1 Ответ

2 голосов
/ 08 декабря 2009

Я не могу ответить на ваш вопрос напрямую, но я столкнулся с аналогичной проблемой, с которой я боролся: сделать снимок экрана 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, Linux с GNOME и Linux с KDE скриншот содержит белую область, где перекрывающееся окно препятствует просмотру.

Я не нашел решения для этого, и подозреваю, что не толькозависит ли это поведение от платформы поведения, но также довольно глючит в SWT.

Хотелось бы услышать, что я не в курсе, хотя!

...