powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Быстрое получение скриншота экрана
39 сообщений из 39, показаны все 2 страниц
Быстрое получение скриншота экрана
    #38549615
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте. Необходимо быстро(25-30 к\c) получать скриншоты экрана с помощью java. Возможно ли это? Спасибо!
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38549726
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое быстрое, по вашему, - Вы написали. А что такое "медленное" и каким макаром оно у вас работает и почему не устраивает - таки нет.
Вообще-то, насчёт скриншотов я знаю только один способ - класс Robot. Хотя, возможно, мои знания устарели.
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38549834
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSergeЧто такое быстрое, по вашему, - Вы написали. А что такое "медленное" и каким макаром оно у вас работает и почему не устраивает - таки нет.
Вообще-то, насчёт скриншотов я знаю только один способ - класс Robot. Хотя, возможно, мои знания устарели.
Спасибо. Robot очень медленный, около 8-10 кадров в секунду. Мне нужно минимум 25-30.
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38549861
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelСпасибо. Robot очень медленный, около 8-10 кадров в секунду. Мне нужно минимум 25-30.
Я подозреваю что дело не в Robot-е. А в остальных операциях тоже. Кадры же надо где-то хранить. Сжимать. И желательно эти всё отдельным потоком.
Вот запустил пример отсюда
http://www.dreamincode.net/forums/topic/234896-faster-screen-capture/
Результат
Seconds it took for 32 screen captures: 1.22
Так что, полагаю, дело совсем не в роботе.
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38549887
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczGorloPavelСпасибо. Robot очень медленный, около 8-10 кадров в секунду. Мне нужно минимум 25-30.
Я подозреваю что дело не в Robot-е. А в остальных операциях тоже. Кадры же надо где-то хранить. Сжимать. И желательно эти всё отдельным потоком.
Вот запустил пример отсюда
http://www.dreamincode.net/forums/topic/234896-faster-screen-capture/
Результат
Seconds it took for 32 screen captures: 1.22
Так что, полагаю, дело совсем не в роботе.
Странно, но у меня ссылка не открывается. Можете перезалить куда-нибудь? Спасибо.
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38549896
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavel,

Ну, вот код:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
import java.awt.*;

public class Test{
public static void main (String [] args) throws Exception{

Rectangle rect = new Rectangle( Toolkit.getDefaultToolkit().getScreenSize() );
        Robot robot = new Robot();
        int count = 1;
        long beforeTime = System.currentTimeMillis();
        while ( count < 32 ) {
                robot.createScreenCapture( rect );
                count++;
        }
        double time = System.currentTimeMillis() - beforeTime;
        System.out.println( "Seconds it took for 32 screen captures: " + time / 1000 );

}
}


Запустите и сообщите результат.
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38549921
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczGorloPavel,

Ну, вот код:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
import java.awt.*;

public class Test{
public static void main (String [] args) throws Exception{

Rectangle rect = new Rectangle( Toolkit.getDefaultToolkit().getScreenSize() );
        Robot robot = new Robot();
        int count = 1;
        long beforeTime = System.currentTimeMillis();
        while ( count < 32 ) {
                robot.createScreenCapture( rect );
                count++;
        }
        double time = System.currentTimeMillis() - beforeTime;
        System.out.println( "Seconds it took for 32 screen captures: " + time / 1000 );

}
}


Запустите и сообщите результат.

1.877
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38549927
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavel 1.877
Ну, дык это уже 17, а не 8-10, как было заявлено выше. А что видео интегрированное? У меня на двух мониторах 1.1 - 1.2.
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38549929
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какая задача стоит? Может взять нативную либу и стримить её куда вам нужно?
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38549987
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavel,
1.939 :(
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38549991
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А! Дык у меня два монитора!
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38549994
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ещё от разрешения тоже зависит.
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38550001
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пару раз запустил - стало 1.67.
Короче, фиг его знает.
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38550006
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот ещё интересная тема. Автор расковырял и немного оптимизировал Robot-а.
http://www.rune-server.org/programming/application-development/387765-directrobot-fast-java-robot-allows-screen-recording.html
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38550048
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczА какая задача стоит? Может взять нативную либу и стримить её куда вам нужно?
Нужно получать скриншот, сравнивать его с пердыдущим(JNI конечно) и обратно в java передавать изменившиеся участки и отправлять их в сеть.
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38550055
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelBlazkowiczА какая задача стоит? Может взять нативную либу и стримить её куда вам нужно?
Нужно получать скриншот, сравнивать его с пердыдущим(JNI конечно) и обратно в java передавать изменившиеся участки и отправлять их в сеть.странное название темы.
Из этих 4-х операций, самое медленное скриншот что-ли?
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38550062
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelНужно получать скриншот, сравнивать его с пердыдущим(JNI конечно) и обратно в java передавать изменившиеся участки и отправлять их в сеть.
Зачем JNI? Там что-то сложное? У Java через VolatileImage+Graphics2D базовые операции достаточно быстрые.
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38550074
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123GorloPavelпропущено...

Нужно получать скриншот, сравнивать его с пердыдущим(JNI конечно) и обратно в java передавать изменившиеся участки и отправлять их в сеть.странное название темы.
Из этих 4-х операций, самое медленное скриншот что-ли?
Судя по всему - да.
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38550079
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczGorloPavelНужно получать скриншот, сравнивать его с пердыдущим(JNI конечно) и обратно в java передавать изменившиеся участки и отправлять их в сеть.
Зачем JNI? Там что-то сложное? У Java через VolatileImage+Graphics2D базовые операции достаточно быстрые.

Нужно выделять различающиеся части изображения в прямоугольные области и эти самые области отправлять по сети. В С++ я сравниваю построчно. Получается очень быстро.
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38550083
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelСудя по всему - да.
Снимайте изображения в одном потоке и складывайте в очередь.
Через ExecutorService разгребайте очередь в нужное число потоков. Нужно только рост очереди предотвратить. ARGB битмапы дохрена занимают.
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38550088
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelPetro123пропущено...
странное название темы.
Из этих 4-х операций, самое медленное скриншот что-ли?
Судя по всему - да.
-1
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38550095
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczGorloPavelСудя по всему - да.
Снимайте изображения в одном потоке и складывайте в очередь.
Через ExecutorService разгребайте очередь в нужное число потоков. Нужно только рост очереди предотвратить. ARGB битмапы дохрена занимают.
Не понял. Как мне это поможет?
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38550098
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123GorloPavelпропущено...

Судя по всему - да.
-1
На C# снятие одного скриншота, анализ с предыдущим и отправка разницы(включая шифрование в протоколе) уходит 25-40мс! Чуть меньше та же операция на Qt(C++).
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38550100
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelНе понял. Как мне это поможет?
Мы выше выяснили что у вас реально робот делает 17 кадров в секунду. Причем после разогрева возможно будет больше.
Вы заявляли про 8-10 кадров в секунду. Что позволяет предположить что 50% времени у вас занимает остальная обработка, которая стопорит захват экрана. Соответсвенно стоит распараллелить захват и обработку, чтобы эффективнее использовать ресурсы.
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38550101
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

А тут на снятие одного скриншота столько уходит.
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38550102
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelНа C# снятие одного скриншота, анализ с предыдущим и отправка разницы(включая шифрование в протоколе) уходит 25-40мс! Чуть меньше та же операция на Qt(C++).
На Linux и MacOS тоже работает? Если задача под винду, то и смысл заморачиваться с Java? Если есть куча аналогичных инструментов?
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38550103
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczGorloPavelНе понял. Как мне это поможет?
Мы выше выяснили что у вас реально робот делает 17 кадров в секунду. Причем после разогрева возможно будет больше.
Вы заявляли про 8-10 кадров в секунду. Что позволяет предположить что 50% времени у вас занимает остальная обработка, которая стопорит захват экрана. Соответсвенно стоит распараллелить захват и обработку, чтобы эффективнее использовать ресурсы.
Нет, просто железо поменялось у меня с тех пор, когда я пробовал :) Сейчас это уже роли никакой не сыграет я думаю. Все равно медленно. Гораздо медленнее чем в C#.
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38550112
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczGorloPavelНа C# снятие одного скриншота, анализ с предыдущим и отправка разницы(включая шифрование в протоколе) уходит 25-40мс! Чуть меньше та же операция на Qt(C++).
На Linux и MacOS тоже работает? Если задача под винду, то и смысл заморачиваться с Java? Если есть куча аналогичных инструментов?
В том то и дело, что я пишу теперь клиента под Mac и Linux. Под винду все работает давно. Сейчас выбираю инструмент. Есть уже наработка на Qt, но что-то я к java привык :)
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38550129
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavel...Гораздо медленнее чем в C#.
Напишите код, типа, как проверяли скорость, только на сишарпе. Щас сравним. :)
А робот - не нативный-ли класс? И не пофиг-ли ему ява это или сишарп?
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38550139
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSergeНапишите код, типа, как проверяли скорость, только на сишарпе. Щас сравним. :)
А робот - не нативный-ли класс? И не пофиг-ли ему ява это или сишарп?
Там много всяких нюансов. Например в реализации есть такой код.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
    // convert Win32 pixel format (BGRX) to Java format (ARGB)
    DASSERT(sizeof(jint) == sizeof(RGBQUAD));
    for(int nPixel = 0; nPixel < numPixels; nPixel++) {
        RGBQUAD * prgbq = &pixelData[nPixel];
	jint jpixel = WinToJavaPixel(prgbq->rgbRed, prgbq->rgbGreen, prgbq->rgbBlue);
	// stuff the 32-bit pixel back into the 32-bit RGBQUAD
	*prgbq = *( (RGBQUAD *)(&jpixel) );
    }


Очевидный удар по производительности. Но как иначе?
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38550145
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSergeGorloPavel...Гораздо медленнее чем в C#.
Напишите код, типа, как проверяли скорость, только на сишарпе. Щас сравним. :)
А робот - не нативный-ли класс? И не пофиг-ли ему ява это или сишарп?
Проверял на текущем(на тот момент) клиенте приложения. Север написанный на java+JNI работал очень медленно, именно больше всего времени занимало снятие скриншота. Потом я все бросил и решил забить на это дело(исходники утеряны). Теперь опять возникла эта необходимость. Я уже написал на Qt эту часть кода и она сравнима по скорости с C# версией ПО. Не вижу смысла спорить об этом когда 1.8 секунды уходит на снятие 32 кадров. И так понятно что скорость гораздо меньше. Да вы сами на C# попробуйте снять скриншот и замерить скорость.
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38550154
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavel,
обычно для таких скоростей идут ближе к железу - DirectX \ OpenGL ...память видюхи
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38550177
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSergeGorloPavel...Гораздо медленнее чем в C#.
Напишите код, типа, как проверяли скорость, только на сишарпе. Щас сравним. :)
А робот - не нативный-ли класс? И не пофиг-ли ему ява это или сишарп?

Каюсь... Замерил сейчас на C# отдельно снятие скриншота. Что-то не намного быстрее на C# :) Где-то видимо я затупил. Может можно как-то без JNI бытро сравнить два кадра и выделить регионы в отдельные битмапы?
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38550180
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123GorloPavel,
обычно для таких скоростей идут ближе к железу - DirectX \ OpenGL ...память видюхи
Первое и третье ни каким боком к яве (в правильном понимании технологии), а второе - к сабжу. :(
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38550235
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSerge,
тут заявлено 30 кадров в сек, а это близко к пределу не только Java, но и железа.
(реальное видео).
Так что технологии любые и FPS будет зависить даже от чихающей рядом уборщицы ))
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38550273
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ShSerge,
тут заявлено 30 кадров в сек, а это близко к пределу не только Java, но и железа.
(реальное видео).
Так что технологии любые и FPS будет зависить даже от чихающей рядом уборщицы ))
20-24 хватит для трансляции удаленного экрана. Но хотя бы этого достичь на java. Эхх..
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38550291
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavel,
по сети большой объем не прогнать. Или алгоритм дельты нетривиальный.
Есть же готовые либы на линуксы
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38550293
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123GorloPavel,
по сети большой объем не прогнать. Или алгоритм дельты нетривиальный.
Есть же готовые либы на линуксы
Что значит большой объем не прогнать? Работает же сейчас система. Но не на java :(
...
Рейтинг: 0 / 0
Быстрое получение скриншота экрана
    #38550407
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavel,
Я говорил объем если гнать полные кадры
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Быстрое получение скриншота экрана
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]