|
3 / 3 / 1
Регистрация: 21.01.2011
Сообщений: 27
|
|||||||||||
Быстрая прорисовка виртуального окна в реальном времени09.10.2011, 22:11. Показов 1802. Ответов 2
Метки нет (Все метки)
Описание задачи: Есть приложение работающее в реальном времени и требующее обновление области экрана "попиксельно" со скоростью не хуже чем 24 раза в секунду.
Область экрана имеет размеры 1024 *300. Работа идет след образом: Сначала изображение рисуется попиксельно в виртуальном окне а затем с помощью BilBlt выводится на форму. Как рисуется изображение в виртуальном окне:
BitBlt(hdscreen,0,0,1024,300,Bm_hdc,0,0, SRCCOPY); Все выводится нормально, НО возникает проблема больших тормозов. Видимо,что если с помощью ::SetPixel(Bm,i,j,RGB(a[i][j],0,0)); пробегать 24 раза в секунду весь массив 1024*300 ,то это будет тяжеловато. Вопрос заключается в том, как можно быстро прорисовать все пиксели в виртуальном окне? Можно ли как-то получить напрямую доступ к массиву пикселей в виртуальном окне, например используя ScanLine ил подобное ей? Добавлено через 16 минут Ах да еще забыл сказать что такое Bm и Bm_hdc
UPDATE Решил выводить изображение в форме Bitmap на с помощью Canvas->Draw: 1)Сначала изображение записывается в Bitmap с помощью ScanLine. 2)Затем этот Bitmap выводится на форму с помощью Canvas->Draw: Но проблему это все же не решило,точнее решало на 20% . Тормоза ушли, но все равно процедура перерисовки ест много ресурсов(процессор загружен моим приложением на 30%).На слабом компе начинает подтормаживать При этом установлено,что сама процедура Canvas->Draw почти не есть системные ресурсы(около 1-2%). Большую часть ресурсов съедает сам процесс перезаписи Bitmap через ScanLine Необходимо найти более быстрый способ доступа. Можно ли каким-либо образом обратиться к памяти Bitmap как к обычному двумерному массиву? Потому что нынешнее быстродействие не устраивает
0
|
|||||||||||
| 09.10.2011, 22:11 | |
|
Ответы с готовыми решениями:
2
Отобразить на экране информацию о загрузке ЦП компьютера в реальном времени
Вывод графика в реальном времени |
|
|
|
| 10.10.2011, 04:34 | |
|
SetPixel() (как и GetPixel()) нереально медленные ф-ции, особенно на семерке. Рисуй "руками" в контексте ус-ва, потом BitBlt().
Может поможет, вот "ручная" реализация GetPixel() (там в конце пары строк не хватает - удаление созданный объектов), если разберешся, можешь SetPixel() по аналогии сделать.
1
|
|
|
3 / 3 / 1
Регистрация: 21.01.2011
Сообщений: 27
|
|||||||||||
| 11.10.2011, 03:00 [ТС] | |||||||||||
|
Спасибо,вроде бы начинает помогать.
Быстродействие детально оценю чуть позже. Только почему то не могу назначить пикселю 8-ми битный цвет,только RGB. При определении в BITMAPINFO необходимых настроек наблюдается черный экран Пишу я следующее:
UPDATE Еще вроде бы заметил странное явление: Движущийся Битмап ест намного больше ресурсов чем статический битмап,но обновляющийся с той же частотой. Т.е например битмап обновляется по таймеру: В первом случае пикселям присваиваются одни и те же константы,а в другом случае-другие уникальные значения. Так вот во втором случае наблюдается резкий рост прожорливости системы. Не знаете с чем это может быть связано? Добавлено через 3 часа 11 минут UPDATE Насчет быстродействия: Нашел ошибку ,из-за которой уходили системные ресурсы. А Ошибка примерно вот какая:
Приложение жрало 25 % ресурсов от всей системы,потому что переменная типа float присваивалась переменной типа DWORD. Никак не пойму почему это было так тяжело для системы. По поводу прорисовки:да,действительно очень быстрый метод. Осталось еще понять как в функцию SetDIBits правильно передать указатель на динамический массив с пикселями. Потому что получается или черный экран или билиберда
0
|
|||||||||||
| 11.10.2011, 03:00 | |
|
Помогаю со студенческими работами здесь
3
Отрисовка графика в реальном времени Звуковая карта в реальном времени График функции в реальном времени
Отображение состояния массива, в реальном времени Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|