![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 20.03.2012
Сообщений: 47
|
![]()
Добрый день, дорогие друзья!
Хочу написать программу, которая будет делать 25 или даже 30 скриншотов в секунду. По сути получается видео. Но мне нужны именно скриншоты. Вот текст программы: Код:
Проблема в том, что функция BitBlt слишком сильно нагружает компьютер и он банально не успевает справиться с поставленной задачей. Можно ли использовать другой алгоритм, что бы ускорить процесс? Или, может быть, возможно использовать изображение с экрана, как двумерный массив точек, перекидывать его в jpg и потом сохранять в файл? Последний раз редактировалось Alex11223; 07.02.2017 в 19:17. |
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 03.06.2009
Сообщений: 1,869
|
![]()
знакомое дело. максимум получается при незагруженности процессора другими задачами 15 нормальных кадров в секунду. 25-30 - уже начинает тормозить программа. давно уже как-то, года 4 назад была мысль по-максимум облегчить программу, урезав в библиотеках все неиспользуемые функции, оставив только используемые. а потом и в сами функции залезть похимичить, убрав оттуда всякие проверки на ошибки
1. как вариант: записывать скриншоты через каждые 6Мб в один файл в конец (размер файла может быть и до 15 Гб), для скорости, а в конце, когда запись с экрана остановил уже, чтоб эти файлы потихоньку оттудова извлекались и качественно записывались в папку. работа с потоками. ...вот сейчас когда расписал этот процесс, аж самому захотелось взять и реализовать... а вообще, на исходник моего скриншотника, мож, чего и допилишь
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
Последний раз редактировалось NetSpace; 07.02.2017 в 18:15. |
![]() |
![]() |
![]() |
#3 | |
Пользователь
Регистрация: 20.03.2012
Сообщений: 47
|
![]()
В браузере по идее не должен работать
![]() Но сработает в Delphi ![]() Цитата:
2. Я не умею работать с потоками. Есть статья или учебник по потокам? 3. Я не совсем понимаю, как следить за объёмом файла. Ты предлагаешь просто записывать каждый скрин в один файл подряд, обновляя его? Потом, когда процесс останавливается, всю эту массу программа должна разобрать по отдельным файликам. Но какой в этом смысл? Разве так будет плюс к скорости? А если программа работает так час или даже два. Там ведь такая каша получится... Мне кажется, что я просто не понял тебя. Хотя, если брать и допустим каждую секунду кидать в один TBitmap 25 скринов подряд, увеличивая его размер лишь в памяти компьютера, а потом сразу все 25 кадров разом сохранить. И так столько времени, сколько хочется, пока место на диске не закончится. Может так имеешь в виду? Последний раз редактировалось Вадим Мошев; 07.02.2017 в 23:02. |
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 27.10.2014
Сообщений: 594
|
![]()
Видать, поиск запрещен?
http://programmersforum.ru/showthread.php?t=23471 |
![]() |
![]() |
![]() |
#5 | |
Форумчанин
Регистрация: 30.06.2015
Сообщений: 353
|
![]()
0. http://programmersforum.ru/showpost.php?p=1766869
1. Изменение Label1.Caption съедает время. А ещё нельзя просто совать GetDC(0) в параметры BitBlt(), у вас утечка из-за этого. Не говоря о том что GetDC(0) тоже съедает время, а его можно делать один раз и заранее. 2. Никак нет. 3. Цитата:
* TBitmap.Create; * TJpegImage.Create; * jpg.Free; * bmp.Free; Да и вообще, почему у вас цикл в OnTimer?? |
|
![]() |
![]() |
![]() |
#6 |
Участник клуба
Регистрация: 03.06.2009
Сообщений: 1,869
|
![]()
кто-то на этом форуме выкладывал исходник скриншотера, который использует различные кодеки для компрессии. но вот одна незадача - при попытке скомпилировать, вываливает кучу ошибок связанных с записью аудио. подключенные модули WaveUtils, WaveStorage, WaveRecorders, WaveMixer, WaveIO, WaveIn, WaveACM, msacm висят мёртвым грузом и не дают ничего, только приписанные в них типы не определяются и, видать, компилятор требует новых каких-то модулей. в итоге, решил просто убрать запись звука, оставив только видео, как мне и было нужно изначально. давно уже на него смотрел, вот, за пару вечеров вырезал всю неработающую аудионачинку. может, кому пригодится...
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
|
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 18.12.2010
Сообщений: 85
|
![]()
а не проще ли будет,нажимать кнопку print screen?копировать и,переименовывать в другой папке этот фото экрана.Какой кстати путь этого фото в Windows.
|
![]() |
![]() |
![]() |
#8 |
Участник клуба
Регистрация: 03.06.2009
Сообщений: 1,869
|
![]()
nikolas0,
нажимать вручную (физически) кнопку 25 раз в секунду? ну, Брюс Ли обзавидовался бы такой скорости... а если программно нажимать - так я и делал, когда свою программу писал, потом автосохранение рисунков в папку. данный процесс выходит долгим, к сожалению....
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
|
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Утилита для запрета скриншотов в Windows | Davidrator | Фриланс | 30 | 17.01.2015 10:02 |
Программа для создания скриншотов экрана. | Release | Софт | 17 | 06.08.2013 07:47 |
Создание скриншотов StretchBlt | Andreyy | Общие вопросы Delphi | 1 | 19.07.2011 17:44 |
Программа для снятия скриншотов | penek | Фриланс | 3 | 08.02.2011 17:42 |
Программа для снятия и пересылки скриншотов | Neroxen | Фриланс | 3 | 11.09.2010 23:06 |