Быстрое перемещение растрового изображения по окну в C ++ - PullRequest
1 голос
/ 26 октября 2009

Я ищу код C ++, который позволил бы мне быстро перемещать растровое изображение по окну, восстанавливая фон по мере его перемещения. В настоящее время я записываю содержимое окна в растровое изображение во время инициализации приложения, а в OnPaint () я рисую это растровое изображение, а затем рисую наложенное растровое изображение. Я дважды буферизую краску. Положение наложенного растрового изображения перемещается с помощью мыши, которая делает недействительным окно.

Это работает нормально, за исключением того, что оно слишком медленное, когда фоновое окно большое (например, рабочий стол Windows), а ПК медленный. Я предполагаю, что перерисовка большого фонового растрового изображения при каждом движении мыши является узким местом. Должен быть намного лучший и быстрый способ сделать это, но мой поиск не нашел нужного мне ответа.

Ответы [ 2 ]

1 голос
/ 26 октября 2009

Вы должны проверить Списки изображений , которые реализуют перетаскивание эффектов .

Win32 API включает функции для перетаскивая изображение на экране. функции перетаскивания переместить изображение гладко, в цвете и без каких-либо мигание курсора. Оба в масках и немаскированные изображения можно перетаскивать.

Конечно, пользователю фактически не нужно перетаскивать изображение. Вы делаете это, изменяя положение изображения.

1 голос
/ 26 октября 2009

Вероятно, самым быстрым способом было бы сохранить ваше подвижное изображение в одном растровом изображении, а затем сохранить в памяти второе временное растровое изображение того же размера. Чтобы нарисовать ваше подвижное растровое изображение поверх вашего основного изображения, вы сначала должны использовать функцию API BitBlt, чтобы скопировать область, в которую вы собираетесь нарисовать подвижное растровое изображение, во временное растровое изображение, а затем BitBlt - ваше подвижное растровое изображение - в основное изображение. При перемещении подвижного растрового изображения вы должны: 1) BitBlt преобразовать временное растровое изображение в его исходное местоположение, затем 2) BitBlt переместить новое местоположение во временное растровое изображение, а затем 3) BitBlt переместить подвижное изображение в новое местоположение в основном растровом изображении.

...