Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
 Аватар для drunkwolfs
10 / 10 / 6
Регистрация: 24.05.2013
Сообщений: 350

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

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

Студворк — интернет-сервис помощи студентам
Рисую в окне график. Есть функция которая вычисляет и выводит его размер и расположение линий. Нужно чтобы эта сетка графика сохранялась в памяти и вычисления новых размеров(координат и другой инфы) производились только при изменении размеров сетки. При этом поверх графика будет выводится линия с большой скоростью.
Если каждый раз пересчитывать координаты графика перед его отрисовкой то цп будет 100% и линия будет "идти" не плавно, а наверно рывками или с задержкой. Скорость обновления должна быть в идеале 2000 кадров в секунду. Сомневаюсь что этого можно достичь, поэтому нужно достичь максимально возможного значения и при этом особо не загружая ЦП.
Как рисовать график так чтобы он сохранился в переменную(или куданибудь еще в памяти)?
Как потом вывести этот график в окно?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.12.2015, 19:05
Ответы с готовыми решениями:

Java + Apache Derby (сохранить данные пользователя в базе данных для дальнейшего использования)
Добрый день! Пишу приложения, необходимо сохранить данные пользователя в базе данных и потом извлечь их оттуда для дальнейшего...

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

Временное хранилище для дальнейшего использования данных
Здравствуйте! Я только начинаю изучать C#.Net. У меня есть маленькая программка, для нее нужно создать временное хранилище, типа dll. Можно...

6
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
09.12.2015, 19:10
Ничего не понятно. То график, то сетка, то какая-то линия скоростная.
2000 кадров? Таких мониторов нет.
0
 Аватар для drunkwolfs
10 / 10 / 6
Регистрация: 24.05.2013
Сообщений: 350
09.12.2015, 19:38  [ТС]
Лол, да я что-то не подумал даже о мониторах. Сейчас уточнил. 10 кадров в секунду максимум (данные будут приходить со скоростью 2000 пакетов в секунду и я буду или среднее выводить или случайное значение).
Но вопрос с отрисовкой все еще актуален. Не разумно каждый раз заново вычислять размеры сетки графика(график=сетка). Ломаная линия на графике - вывод данных.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
09.12.2015, 21:00
Что за сетка? Оси координат, что ли? Какими средствами это реализовано? WinAPI?
0
 Аватар для drunkwolfs
10 / 10 / 6
Регистрация: 24.05.2013
Сообщений: 350
09.12.2015, 23:29  [ТС]
да, winapi
MoveToEx, LineTo, Rectangle
0
130 / 70 / 25
Регистрация: 20.03.2014
Сообщений: 261
10.12.2015, 00:07
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
10 / 10 / 6
Регистрация: 24.05.2013
Сообщений: 350
15.12.2015, 19:09  [ТС]
Спасибо, какие еще есть простые для новичка инструменты которыми можно без проблем это реализовать(график)?
Без .NET и нужна желательно статическая сборка программы(чтобы не приходилось дополнительно устанавливать разные фреймворки или что то еще)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.12.2015, 19:09
Помогаю со студенческими работами здесь

Вытащить значение переменной для дальнейшего использования
Всем привет, хочу вытянуть значение переменной Вот как это место(где я ее хочу получить) выглядит namespace WindowsFormsApp4 ...

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

Как считать число из stdin для дальнейшего использования
Использую NASM под OCUNIX

Получить выбранное значение DBLookupComboBox для дальнейшего использования
Добрый день, уважаемые! Вопрос следующего характера (не пинайте, вопрос вроде поднимался, но решения для себя не нашел): необходимо...

Вернуть значение переменных из функций для дальнейшего использования
Достаную данные про курс трёх валют из сайта банка Украины. У функции я получаю уже данные но не могу ими воспользоваться в других ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru