Быстрое перемещение растрового изображения по окну в C ++
-
06-07-2019 - |
Вопрос
Я ищу код C ++, который позволил бы мне быстро перемещать растровое изображение по окну, восстанавливая фон по мере его перемещения. В настоящее время я записываю содержимое окна в растровое изображение во время инициализации приложения, а в OnPaint () я рисую это растровое изображение, а затем рисую наложенное растровое изображение. Я дважды буферизую краску. Положение наложенного растрового изображения перемещается с помощью мыши, которая делает недействительным окно. Р>
Это работает нормально, за исключением того, что оно слишком медленное, когда фоновое окно большое (например, рабочий стол Windows), а компьютер медленный. Я предполагаю, что перерисовка большого фонового растрового изображения при каждом движении мыши является узким местом. Должен быть намного лучший и быстрый способ сделать это, но мой поиск не нашел нужного мне ответа.
Решение
Вероятно, самым быстрым способом было бы сохранить ваше подвижное изображение в одном растровом изображении, а затем сохранить в памяти второе временное растровое изображение того же размера. Чтобы нарисовать ваше подвижное растровое изображение поверх вашего основного изображения, вы сначала должны использовать функцию API BitBlt, чтобы скопировать область, в которую вы собираетесь нарисовать подвижное растровое изображение, во временное растровое изображение, а затем BitBlt - ваше подвижное растровое изображение - в основное изображение. При перемещении подвижного растрового изображения вы должны: 1) BitBlt преобразовать временное растровое изображение в его исходное местоположение, затем 2) BitBlt переместить новое местоположение во временное растровое изображение, а затем 3) BitBlt переместить подвижное изображение в новое местоположение в основном растровом изображении. Р>
Другие советы
Вам следует ознакомиться с списками изображений которые реализуют перетаскивая эффекты .
Win32 API включает функции для перетаскивая изображение на экране. функции перетаскивания переместить изображение гладко, в цвете и без каких-либо мигание курсора. Оба в масках и немаскированные изображения можно перетаскивать.
Конечно, пользователю не нужно перетаскивать изображение. Вы делаете это, изменяя положение изображения.