В арсенале имею вот такое безобразие: захват кадра и запись его на диск. После читаю картинку по сети. Но скорость записи в файл каких-то 30-40 кб оставляет желать лучшего. За половину секунды не каждый раз успевает записать файл. Или он просто недоступен для чтения в это время. Может есть какие-то более прогрессивные методы для этой задачи?
code_30830.txt
Этот топик читают: Гость
Ответов: 704
Рейтинг: 7
|
|||
карма: 0 |
| ||
файлы: 1 | code_30830.txt [1.5KB] [146] |
Ответов: 8930
Рейтинг: 823
|
|||
Neo, в Вашей схеме выставил на таймере 15 мс и измерение времени выдачи каждого кадра: 6-8 кадров проскакивали по ~20 мс, а следующий за 230 мс и вместо ожидаемых равномерных 50 кадров/секунду получались рваные по времени 20кадров
Наверное, Windows выполняя свои задачи вмешивается в работу буфера |
|||
карма: 19 |
|
Ответов: 168
Рейтинг: 7
|
|||
Леонид прав
система использует системное время по своему усмотрению и вызывает пользовательские таймера после рассасывания внутрисистемных запросов причем все подряд(если их несколько) никогда раньше и всегда позже Помочь тут могут 3 вещи -через inlinecode вызывай TimeBeginPeriod(1) в конце работы таймера переустанавливая точность определения времени- действует на всю систему!, многие приложения ее сбрасывают/переустанавливают и винда в первую очередь после выполнения точного вызова - используй точный аудио mmtimer (если не занят), при инициализации укажи точность выполнения вызовов (чем точнее тем более нагружается система) и никогда не ставь 1мс(в точности) оставь системе подышать. - ну и последний вариант приподними приоритет потока на 1..2 единицы в пределах приоритета процесса вызовом "fid:=SetThreadPriority(my_handle,my_priority);" где my_handle наш хендл потока а my_priority нужный приоритет(0 = THREAD_PRIORITY_NORMAL а 15 = THREAD_PRIORITY_TIME_CRITICAL) |
|||
карма: 1 |
| ||
Голосовали: | Neo |
Ответов: 704
Рейтинг: 7
|
|||
Вернулся к вопросу с вебкой, но теперь шибко досаждает что в штатном примере буфер обмена занят. А он часто нужен. Может можно как-то обойти и захватить картинку? Хочу записать в файл ее, но на изображении она просто выводится, а не заносится как данные. Посмотрите схему, пожалуйста.
code_30975.txt |
|||
карма: 0 |
| ||
файлы: 1 | code_30975.txt [4.9KB] [126] |
Ответов: 8930
Рейтинг: 823
|
|||
Neo, камераотрисовывает не в картинке, а на "контроле" по handle, а снять Вы пытаетесь через BitMap, где ничего нет
Чем не устраивает точка doSaveDIB?, сжать и изменить размер можно потом, или на ходу, открывая и изменяя только что записанный кадр. ------------ Дoбавленo в 00.58: Как-то так:
|
|||
карма: 19 |
| ||
Голосовали: | Neo |
Ответов: 704
Рейтинг: 7
|
|||
Леонид, вот огромное Вам спасибо! И время эти махинации с файлами занимают не много совсем. Я думал это будет очень долго, потому сразу отбросил этот вариант. Все мучился с этим буфером из штатного примера, не находя другого быстрого пути захвата.
|
|||
карма: 0 |
|
Ответов: 8930
Рейтинг: 823
|
|||
Neo, времени может и немного, но ДИСК-то постоянно дёргается, что не совсем хорошо
|
|||
карма: 19 |
|
Ответов: 704
Рейтинг: 7
|
|||
Леонид, диск C мучается с самого рождения
Если нужно его поберечь, то всегда можно использовать драйвер виртуального диска в памяти - работает шикарно. |
|||
карма: 0 |
|
Ответов: 8930
Рейтинг: 823
|
|||
Neo, и правда, у меня 8 Гб и загрузить её на 100% не удавалось
|
|||
карма: 19 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
карма: 25 |
| ||
файлы: 1 | code_30978.txt [1.6KB] [139] |
10