Если копировать данные с экрана на экран, а не из контекста памяти на экран, то исходная картинка и ее копия на экране могут пересекаться. Если прочитать первую точку строки растра и поместить ее на место второй, то этим будет стерта вторая точка исходной картинки и ее невозможно будет переписать на место третьей. Предотвратить искажения можно несколькими способами. Прежде всего, искажения можно убрать ценой увеличения вдвое количества операций чтения-записи. Вместо прямого копирования исходная картинка (область источника)

Работа с растровыми изображениями

записывается в промежуточный буфер, а потом из него - в область приемника. Также можно вычислить заранее начальный адрес и направление копирования. При сдвиге изображения вправо картинка не будет искажаться, если копировать строки, начиная с правого края. Значительное увеличение затрат времени на копирование при пересечении областей источника и приемника будет указывать на выбор первого варианта.

При помощи команды меню Вывод ► Вывод DDB/DIB проекта BitmapTest нужно вызвать последовательную загрузку и отображение трех картинок (размером 30 х 30, 150 х 150, 300 х 300) сначала в формате DDB, потом в DIB. Время вывода изображений функцией BitBltO вызывается на экран пунктом Время (рис. 17.2).

Результаты измерения времени

Рис. 17.2. Результаты измерения времени Каждый рисунок выводится на экран четыре раза, все вызовы, кроме первого, дают стабильные результаты. Время вывода на экран изображения в DIB-форма-те ведет себя в соответствии с исходными предположениями. Площади картинок относятся как 1"opengl4_190.html">⇐ Предыдущая| |Следующая ⇒