2012-01-05 3 views
0

Я пытаюсь сделать периодические (неоднократные) снимки экрана окна неактивного или фонового приложения. У меня есть прямоугольник окна, но если пользователь меняет прямоугольник окна, я получаю скриншот с черными оттенками, соответствующими изменениям размера. Я могу получить прямоугольник каждый раз, прежде чем снимать снимок экрана, но это делает мой код медленнее, поэтому я хочу, чтобы пользователь не изменял размер своего окна или есть ли триггер событий при изменении размера окна? Я использую Java с JNA. Какие-либо предложения? СпасибоПредотвращение изменения размера окон

+0

Предотвращение изменения размера ваших окон в их окнах будет раздражать их. что? – rossum

+0

Или есть ли событие изменения размера окна? Я мог бы выбрать один из этих двух. Одна профилактика, обработка второго события. :) – Ahamed

+0

Получает ли прямоугольник действительно ваш код медленнее по сравнению с захватом пикселей? Немного удивительно ... в любом случае я согласен с @rossum. –

ответ

0

Я сделал то же самое для записи видео из приложений, использующих компоненты SWT. Существует один слушатель, который мог бы сделать работу:

public class ShellControlsListener implements ControlListener { 
    @Override 
    public void controlMoved(ControlEvent e) { 
     // You will need to retrieve new coordinates 
    } 
@Override 
    public void controlResized(ControlEvent e) { 
     // Do you work here: retrieve new bounds 
    } 
} 

Я полагал, что вы могли бы использовать этот вид слушателя с AWT/Swing.

Получение координат и границ окна не является реальной проблемой при 2 ~ 4 FPS. Я могу записывать и кодировать 25 FPS с помощью java.awt.Robot. (Получение границ окна выполняется быстро по сравнению с Robot.createScreenCapture (java.awt.Rectangle).

Если вам действительно нужны представления, вам нужно только получить границы, когда ваше окно перемещено или изменено, нет необходимости устанавливать окно не изменяйте размер (если вы не хотите использовать свои скриншоты для создания видео, потому что в этом случае все скриншоты должны иметь одинаковые размеры).

+0

Не могли бы вы помочь мне записать конкретное окно на 25 FPS? и Как вы не изменили размер других окон приложения? Потому что я пытался получить 25 экранов в секунду, но я не мог этого сделать? – Ahamed

+0

В основном приложение составлено из 1 фонового потока, который захватывает скриншоты с использованием awt Robot (захват каждые 1/частота кадров). Затем изображение передается видеокодеру (например, Xuggle). Третий компонент - это ControlListener, который обнаруживает изменение размера приложения; но поскольку я не использовал JNA, я не могу записать не-Java-окно. Единственный способ добиться 25 FPS - это кодирование и запись видео на лету. На данный момент я могу записать только одно окно, но это достаточно хорошо для моих нужд. Но я сталкиваюсь с проблемами исполнения, когда окно слишком велико (мне приходится уменьшать частоту кадров). – zeropouet

+0

Спасибо большое !!!! – Ahamed

2

Вы можете позвонить frame.setResizable(false), чтобы отключить изменение размера окна. Вы также можете сделать это:

frame.addComponentListener(new ComponentAdapter() { 
    public void componentResized(ComponentEvent e) { 
     // Update rectangle 
    } 
} 

(Предполагая, что здесь этот кадр является java.awt.Frame или javax.swing.JFrame)

+0

Я могу предотвратить или отреагировать на изменения размера окна приложения, но хочу узнать другие изменения размера окна или приложения. – Ahamed

+0

В зависимости от вашей ОС может возникнуть вызов JNA, который вы можете сделать, чтобы прослушивать изменение размеров окон в других приложениях. Но я согласен с тем, что запрос текущего прямоугольника окна должен быть быстрым по сравнению с захватом пикселей. Сколько замедления вы наблюдаете, когда вы каждый раз запрашиваете прямоугольник? –

+0

В настоящее время я неоднократно делаю вызов 'JNA' каждый раз. Захват пикселей потребляет время, но я не могу его опустить, поскольку содержимое внутри окна продолжает меняться. Я настраиваю код, чтобы работать лучше, поэтому подумал об удалении этого прямоугольника окна 'JNA', который был бы бесполезен, если пользователь не изменил размер окна. – Ahamed

Смежные вопросы