Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 151

GDI+ , принцип перемещения графических объектов

29.06.2022, 23:00. Показов 2268. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вообщем дано.
GDIplus::Graphics созданный с memory device context.

Рисую фигуры, обновляю окно посредством UpdateLayeredWindow.
Все ок.

Интересует такой вопрос:
Например имеется нарисованный квадрат, или некий блок текста. Нужно этот блок переместить, или анимировать...
Какой принцип ?
- удаляем нарисованый блок, посредством рисования ректангла с фоновым цветом;
- рисуем заново текст/квадрат (неважно) применяя другие координаты;
- обновляем через invalidate или UpdateLayeredWindow

Или может есть уже готовый способ попроще, например связанный с трансформацией (word Transformation) графики?
Тут каков принцип?

Может есть вариант, уже нарисованную часть экрана сграбить в некий блок (регион), применить трансформацию, обновить клиентскую область.

Знающие люди, ответьте...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.06.2022, 23:00
Ответы с готовыми решениями:

Методы перемещения графических объектов в Canvas
Здравствуйте. У меня возник такой вопрос - какие по мимо move() и coords() есть методы перемещения графических объектов на канве? Я только...

Изучение изменения цвета, размеров и перемещения графических объектов
Вывести на экран монитора пятиугольник светло-зеленого (LightGreen) цвета таким образом, чтобы сначала отображалась одна сторона...

Изменение цвета, размеров и перемещения графических элементов
Обеспечить изменение цвета, размеров или перемещения графических элементов. Процесс изменения графических элементов должен быть...

10
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
30.06.2022, 06:52
1. Создаёте изображение в памяти.
2. Стираете, рисуете там что нужно по таймеру или по событию.
3. Говорите системе, что определённая область окна стала недействительной и требует перерисовки (InvalidateRect+прямоугольник+TRUE).
4. В обработчике WM_PAINT копируете прямоугольник из изображения в памяти на окно.

Добавлено через 19 минут
Как рисовать квадрат?
Давайте представим, что у вас не квадрат, а некий объект, который существует на сцене и его можно нарисовать.
Объект должен знать как себя прорисовывать, для этого у него есть метод Render.
Сцена содержит список объектов, которые следует рисовать, обходит список и вызывает у каждого объекта Render, передавая контекст для рисования (GRAPHICS или HDC).
Координаты объектов не хранят в самом объекте, координаты хранит сцена. Сцена следит за тем где каждый объект расположен, и перед рисованием объекта сцена устанавливает применяет матрицу через ModifyWorldTransform. Так как у нас установлена матрица объекта, то объект рисуется там где нам надо.
Объект же про мировую матрицу знает ничего и рисует себя всякий раз так, будто он в центре координат.

Когда вы анимируете объекты, вы не меняете их координаты, вы устанавливаете новую матрицу объекта с небольшим сдвигом относительно старой, стираете сцену, визуализируете её заново.
0
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 151
30.06.2022, 07:51  [ТС]
Прочитайте внимательно мои вопросы и дайте ответы без КОПИПАСТА. То что вы написали, я немного не об этом спрашивал.
Не хотите нормально отвечать - не отвечайте вовсе.
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
30.06.2022, 08:41
Вы определитесь: вам нужен готовый способ или рисование руками через GDI?
Если вы рисуете руками через GDI, то вам придётся рисовать покадрово.
Если вам нужен готовый способ, то берите любой графический двигатель и вперёд.
0
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 151
30.06.2022, 08:55  [ТС]
Да я еще никогда не был настолько ОПРЕДЕЛЕННЫЙ как сейчас.
Я ж написал - gdi+
Я же написал 3 вопроса, по теме .
Вы можете процитировать каждый из них и дать на них свой ответ?
Неужели так сложно, если вы в этом разбираетесь?
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
30.06.2022, 09:56
Вот ответ на первый вопрос:
Цитата Сообщение от FreakMurderer Посмотреть сообщение
Какой принцип ?
- удаляем нарисованый блок, посредством рисования ректангла с фоновым цветом;
Цитата Сообщение от Замабувараев Посмотреть сообщение
1. Создаёте изображение в памяти.
2. Стираете, рисуете там что нужно
Вот ответ на второй вопрос:
Цитата Сообщение от FreakMurderer Посмотреть сообщение
рисуем заново текст/квадрат (неважно) применяя другие координаты
Цитата Сообщение от Замабувараев Посмотреть сообщение
рисуете там что нужно по таймеру или по событию
Вот ответ на третий вопрос:
Цитата Сообщение от FreakMurderer Посмотреть сообщение
обновляем через invalidate или UpdateLayeredWindow
Цитата Сообщение от Замабувараев Посмотреть сообщение
(InvalidateRect+прямоугольник+TRUE).
4. В обработчике WM_PAINT копируете прямоугольник из изображения в памяти на окно
Ну и последнее:
Цитата Сообщение от FreakMurderer Посмотреть сообщение
например связанный с трансформацией (word Transformation) графики
Цитата Сообщение от Замабувараев Посмотреть сообщение
Если вы рисуете руками через GDI, то вам придётся рисовать покадрово
0
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 151
30.06.2022, 11:21  [ТС]
Вот же упертый, ну все равно надо под себя подтесать, пофиг что не различаете где кончаются вопросы, где начинаются. Пофиг что выдираете цитаты из контекста. Извините, разбираться в вашей каше не хочу, ответы более от вас получать - тоже.

Еще раз, может кто другой отвтетит. Нет так нет. Поищу в другом месте - не впервой.

Вообщем цитирую половигу своего первого поста:
1. Какой принцип ?
- удаляем нарисованый блок, посредством рисования ректангла с фоновым цветом;
- рисуем заново текст/квадрат (неважно) применяя другие координаты;
- обновляем через invalidate или UpdateLayeredWindow

2. Или может есть уже готовый способ попроще, например связанный с трансформацией (word Transformation) графики?
Тут каков принцип?

3.Может есть вариант, уже нарисованную часть экрана сграбить в некий блок (регион), применить трансформацию, обновить клиентскую область.

Просто просьба, внятно , (там где нужны доп. пояснения - объясните) - дайте ответы на вопросы 1,2,3.
Спасибо.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
30.06.2022, 13:50
Если графика сложная и используется афинная трансформация то можно отрисовать статичную часть в буферное изображение. Это буферное изображение уже переносить с трансформацией в нужный Graphics. Если же графика элементарная то буферное изображение необязательно. Очищать Graphics можно методом Clear.
0
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 151
30.06.2022, 14:43  [ТС]
Статичную часть в б.и. как, в гди+?
Это типа пункт 3?
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
02.07.2022, 00:35
FreakMurderer, создаешь Bitmap; создаешь Graphics ассоциированный с ним; рисуешь туда как обычно без трансформаций. Теперь в этом битмапе у тебя изображение статичное. Далее уже отрисовываешь его с трансформациями как ты это делаешь на данный момент (на DC окна если это просто отрисовка или на контекст в памяти если это слоеное окно).
0
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 151
02.07.2022, 07:52  [ТС]
The trick,
создаешь Bitmap; создаешь Graphics ассоциированный с ним
То есть это будет уже 2 объекта Graphics?

Далее уже отрисовываешь его с трансформациями как ты это делаешь на данный момент на контекст в памяти
Конкретно, дайте пожалуйста набор команд, делающих это.

P.s. этот способ и есть так называемый мною п.3 ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.07.2022, 07:52
Помогаю со студенческими работами здесь

Изменения цвета, размеров и перемещения графических элементов
Вывести на экран монитора круг зеленого (Green) цвета таким образом, чтобы он плавно перемещался от нижнего края екрана к верхнему краю и ...

Создать анимацию трансформации (увеличения) и движения (перемещения) графических обьектов одновременно
Приветствую Вас господа! В соответствии с задачей нужно реализовать анимацию с трансформацией (увеличением) и движением (перемещением)...

Удаление объектов GDI
Почему нужно удалять созданные (например так: hRgn = CreateRectRgn(0, 0, 0, 0); ) объекты GDI? ну то есть зачем их удалять явно?...

Копирование GDI объектов
Речь скорее не о копировании самих объектов и их ресурсов для создания других объектов GDI. Есть функция GetObject, но она лишь...

Редактирование объектов GDI+ (Перемещение, растягивание)
Доброго времени суток! Возникла проблема при написании графического редактора. Необходимо перетаскивать по форме (PictureBox или Panel)...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru