Форум программистов, компьютерный форум CyberForum.ru

Быстрая прорисовка виртуального окна в реальном времени - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Помогите решить конкретную задачу связанную с шаблонами http://www.cyberforum.ru/cpp/thread362718.html
Такая задача: есть три класса, один простой, другой шаблонный, а третий - интерфейсный. Простой класс и шаблонный - наследуются от интерфейса, и получают его в своё распоряжение. Но простой класс юзает интерфейс одним способом, а шаблонный - другим. Как грамотно специализировать методы интерфейса для каждого класса? 1. TInterface<клиент> Интерфейс. Имеет кучу методов с дефолтными...
C++ Связать Matlab и visual studio 2010 Необходимо подключить библиотеки matlab к visual studio в c++. Проблема в том что я даже описания найти не могу в каких библиотеках матлаба какие функции находятся. Может кто-нибудь помочь? http://www.cyberforum.ru/cpp/thread362579.html
Help Me Gps Navigator C++
Помогите с прогой GPS NAVIGATOR хотябы сделать 1 маршрут от а до б.... все советы учту есть сpp код ..... #include <iostream> #include <iomanip> #include <queue> #include <string> #include <math.h> #include <ctime> using namespace std;
C++ Помогите разобраться с шаблонами
Пытаюсь реализовать новую для себя методику "службы класса". Все хорошо работало, пока не возникла необходимость в качестве клиента слжбы задействовать не обычный класс, а класс-шаблон. Впрочем, все по порядку... Не ругайте за обилие комментариев, я их сделал специально для того, что бы люди смогли понять мою задумку. Здесь линк на более удобный пастербин:...
C++ как раскрасить стаистический рисунок? http://www.cyberforum.ru/cpp/thread361148.html
#include <graphics.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> void Box(int x1, int y1, int x2, int y2); int main(void) { int xmax, ymax;
C++ диспечер задач пожалуйста скиньте диспечер задач на с++ или на с# у кого есть, а то вообще времени ни на что не хватает, чтоб еще его делать. подробнее

Показать сообщение отдельно
Predlegion
3 / 3 / 0
Регистрация: 21.01.2011
Сообщений: 27

Быстрая прорисовка виртуального окна в реальном времени - C++

09.10.2011, 22:11. Просмотров 981. Ответов 2
Метки (Все метки)

Описание задачи: Есть приложение работающее в реальном времени и требующее обновление области экрана "попиксельно" со скоростью не хуже чем 24 раза в секунду.

Область экрана имеет размеры 1024 *300.

Работа идет след образом: Сначала изображение рисуется попиксельно в виртуальном окне а затем с помощью BilBlt выводится на форму.

Как рисуется изображение в виртуальном окне:
C++
1
2
3
for(int i=0;i<n;i++)
 for(int j=0;j<m;j++)
   ::SetPixel(Bm,i,j,RGB(a[i][j],0,0));
Как изображение выводится:


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

C++
1
2
3
4
5
6
HDC Bm,Bm_hdc,hdscreen;
 
 
hdscreen=GetDC(Form1->Handle)
Bm=CreatCompatibleBitmap(hdscreen,1024,300);
Bm_hdc=CreatCompatibleDC(hdscreen);
Добавлено через 7 часов 14 минут
UPDATE

Решил выводить изображение в форме Bitmap на с помощью Canvas->Draw:

1)Сначала изображение записывается в Bitmap с помощью ScanLine.
2)Затем этот Bitmap выводится на форму с помощью Canvas->Draw:


Но проблему это все же не решило,точнее решало на 20% .
Тормоза ушли, но все равно процедура перерисовки ест много ресурсов(процессор загружен моим приложением на 30%).На слабом компе начинает подтормаживать

При этом установлено,что сама процедура Canvas->Draw почти не есть системные ресурсы(около
1-2%).

Большую часть ресурсов съедает сам процесс перезаписи Bitmap через ScanLine

Необходимо найти более быстрый способ доступа.

Можно ли каким-либо образом обратиться к памяти Bitmap как к обычному двумерному массиву?
Потому что нынешнее быстродействие не устраивает
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru