| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Перерисовка части изображения (функция StretchBlt) |
| Автор: vlad21 3.10.2007, 07:52 |
| На экран выведено полное изображение с помощью WinApi функции StretchBlt. Далее идет перерисовка части этого изображения, также, с помощью StretchBlt. В результате получается немного искаженное изображение. Т.е. результат при StretchBlt полного изображения и StretchBlt части изображения отличается. Как этого избежать? Т.е., чтобы была возможность перерисовать изображения по частям, причем части изображения могут перекрывать друг друга, и результат не отличался от полной перерисовки? Приложение не использует DirectX и OpenGL. Изображение формируется в памяти, а потом выводится на экран и при этом масштабируется. Если без масштабирования, то перерисовка по частям не вызывает искажений. Не знаю видимо, тут необходима какая то своя функция вывода изображения и StretchBlt не подходит. И это видимо из за того, что соотношение сторон прямоульника (который хранится в памяти и который получается при масштабировании) при полной перерисовке и при частичной, хоть и немного, но отличается. Пример: есть изображение шириной в 80 пикселов. Оно выводится на экран шириной в 100 пикселов. Т.е. коэф. масштабирования 100/85 = 1.25 Теперь необходимо перерисовать часть этого изображения, при этом часть, имеет ширину в 22 пиксела, применяем коэф. 22*1.25 = 27.5. Т.е. изображение должно растянуться на ширину равную 27.5 пикселов, при этом происходит огругление и следствие этого - перерисовка не повторяющая полную перерисовку. Может есть какие то методы для решения данной проблемы? |
| Автор: zkv 3.10.2007, 08:13 |
а чего вопрос тут делает тогда? BitBlt использовать можно попробовать. Один раз растянуть картинку а потом копировать - всю или части. Те один раз рисуем при помощи StretchBlt на контекст в памяти, а затем всегда из него на устройство, еще и работать точно быстрее будет. |
| Автор: vlad21 3.10.2007, 09:03 |
| 2 zkv: Это тема связана с графикой, а раздел форума называется не DirectX/OpenGL, а C/C++: Мультимедия, OpenGL/DirectX. Метод который, Вы, предложили - один раз маштабировать, а потом уже из него копировать не подходит, т.к. изображение формируется с помощью метода, использующего исходный размер (без масштабирования). При масштабировании теряется часть информации (если например происходит уменьшение изображения). Т.е. попиксельно изменяем изображение исходного размера и эту измененную часть переносим, масштабируя на экран. |