С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
drunkwolfs
9 / 9 / 6
Регистрация: 24.05.2013
Сообщений: 349
1

Сохранить отрисованный объект в ОЗУ для дальнейшего использования

09.12.2015, 19:05. Просмотров 230. Ответов 6
Метки нет (Все метки)

Рисую в окне график. Есть функция которая вычисляет и выводит его размер и расположение линий. Нужно чтобы эта сетка графика сохранялась в памяти и вычисления новых размеров(координат и другой инфы) производились только при изменении размеров сетки. При этом поверх графика будет выводится линия с большой скоростью.
Если каждый раз пересчитывать координаты графика перед его отрисовкой то цп будет 100% и линия будет "идти" не плавно, а наверно рывками или с задержкой. Скорость обновления должна быть в идеале 2000 кадров в секунду. Сомневаюсь что этого можно достичь, поэтому нужно достичь максимально возможного значения и при этом особо не загружая ЦП.
Как рисовать график так чтобы он сохранился в переменную(или куданибудь еще в памяти)?
Как потом вывести этот график в окно?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2015, 19:05
Ответы с готовыми решениями:

Передача пераметров объекта для дальнейшего использования
Здравствуйте! Пытаюсь написать простенький код на С++ с использованием классов....

Очистить значение переменной для дальнейшего использования
#include <iostream> #include <conio.h> using namespace std; int main() {...

Как сделать комплексное число глобальным, для дальнейшего использования?
Мне нужно чтобы а1, а2, а3 можно было использовать дальше, return a1,a2,a3;...

Написать dll для дальнейшего использования в программах на других языках
как правильно написать dll чтоб ей можно было пользоваться программам на других...

Не получается сохранить найденные координаты центров для дальнейшего оперирования ими
Есть цикл который находит центр объекта и ведет обведение его прямоугольником и...

6
nmcf
6516 / 5745 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
09.12.2015, 19:10 2
Ничего не понятно. То график, то сетка, то какая-то линия скоростная.
2000 кадров? Таких мониторов нет.
0
drunkwolfs
9 / 9 / 6
Регистрация: 24.05.2013
Сообщений: 349
09.12.2015, 19:38  [ТС] 3
Лол, да я что-то не подумал даже о мониторах. Сейчас уточнил. 10 кадров в секунду максимум (данные будут приходить со скоростью 2000 пакетов в секунду и я буду или среднее выводить или случайное значение).
Но вопрос с отрисовкой все еще актуален. Не разумно каждый раз заново вычислять размеры сетки графика(график=сетка). Ломаная линия на графике - вывод данных.
0
nmcf
6516 / 5745 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
09.12.2015, 21:00 4
Что за сетка? Оси координат, что ли? Какими средствами это реализовано? WinAPI?
0
drunkwolfs
9 / 9 / 6
Регистрация: 24.05.2013
Сообщений: 349
09.12.2015, 23:29  [ТС] 5
да, winapi
MoveToEx, LineTo, Rectangle
0
Горелый
70 / 44 / 17
Регистрация: 20.03.2014
Сообщений: 197
10.12.2015, 00:07 6
WinAPI, давно это было.
Могу предложить только алгоритм.
1. Создать графический контекст на котором рисовать сетку.
2. Копировать контекст с сеткой на основной контекст (тут помню, BitBlt нужно использовать)
3. Рисовать линию на основном контексте.

Добавлено через 2 минуты
Код из MSDN для 2-ной буферизации, там есть строчки как создать дополнительный теневой контекст.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
LRESULT CALLBACK NoFlickerWndProc(HWND hWnd, UINT msg,
                                  WPARAM wParam, LPARAM lParam)
{
    PAINTSTRUCT ps;
 
    switch(msg) {
    case WM_SETTEXT:
        lstrcpy(szCaption, (LPSTR)lParam);
        InvalidateRect(hWnd, NULL, TRUE);
        break;
 
    case WM_SETFONT:
        hfnt = (HFONT) wParam;
        break;
 
    case WM_ERASEBKGND:
        return (LRESULT)1; // Say we handled it.
 
    case WM_PAINT:
        BeginPaint(hWnd, &ps);
        Paint(hWnd, &ps);
        EndPaint(hWnd, &ps);
        break;
 
    default:
        return DefWindowProc(hWnd, msg, wParam, lParam);
        break;
    }
    return NULL;
}
 
static void Paint(HWND hWnd, LPPAINTSTRUCT lpPS)
{
    RECT rc;
    HDC hdcMem;
    HBITMAP hbmMem, hbmOld;
    HBRUSH hbrBkGnd;
    HFONT hfntOld;
 
    //
    // Get the size of the client rectangle.
    //
 
    GetClientRect(hWnd, &rc);
 
    //
    // Create a compatible DC.
    //
 
    hdcMem = CreateCompatibleDC(lpPS->hdc);
 
    //
    // Create a bitmap big enough for our client rectangle.
    //
 
    hbmMem = CreateCompatibleBitmap(lpPS->hdc,
                                    rc.right-rc.left,
                                    rc.bottom-rc.top);
 
    //
    // Select the bitmap into the off-screen DC.
    //
 
    hbmOld = SelectObject(hdcMem, hbmMem);
 
    //
    // Erase the background.
    //
 
    hbrBkGnd = CreateSolidBrush(GetSysColor(COLOR_WINDOW));
    FillRect(hdcMem, &rc, hbrBkGnd);
    DeleteObject(hbrBkGnd);
 
    //
    // Select the font.
    //
 
    if (hfnt) {
        hfntOld = SelectObject(hdcMem, hfnt);
    }
 
    //
    // Render the image into the offscreen DC.
    //
 
    SetBkMode(hdcMem, TRANSPARENT);
    SetTextColor(hdcMem, GetSysColor(COLOR_WINDOWTEXT));
    DrawText(hdcMem,
             szCaption,
             -1,
             &rc,
             DT_CENTER);
 
    if (hfntOld) {
        SelectObject(hdcMem, hfntOld);
    }
 
    //
    // Blt the changes to the screen DC.
    //
 
    BitBlt(lpPS->hdc,
           rc.left, rc.top,
           rc.right-rc.left, rc.bottom-rc.top,
           hdcMem,
           0, 0,
           SRCCOPY);
 
    //
    // Done with off-screen bitmap and DC.
    //
 
    SelectObject(hdcMem, hbmOld);
    DeleteObject(hbmMem);
    DeleteDC(hdcMem);
 
}
0
drunkwolfs
9 / 9 / 6
Регистрация: 24.05.2013
Сообщений: 349
15.12.2015, 19:09  [ТС] 7
Спасибо, какие еще есть простые для новичка инструменты которыми можно без проблем это реализовать(график)?
Без .NET и нужна желательно статическая сборка программы(чтобы не приходилось дополнительно устанавливать разные фреймворки или что то еще)
0
15.12.2015, 19:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2015, 19:09

Как сохранить результат игры в памяти? Не ОЗУ
Всем привет. Пишу вот морской бой и решил сделать таблицу рейтингов. И не знаю,...

Литература для дальнейшего обучения
Прочитал книгу Р. Лафоре об основах языка, и хочется развиваться дальше. В...

Работа с объектами из разных файлов, использования указателя на текущий объект
Добрый день. Очень хотел бы получить помощь по следующему вопросу. мне...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru