![]() |
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]() ![]() ![]() |
|
vlad21 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 3.10.2007 Репутация: нет Всего: нет |
На экран выведено полное изображение с помощью WinApi функции StretchBlt. Далее идет перерисовка части этого изображения, также, с помощью StretchBlt. В результате получается немного искаженное изображение.
Т.е. результат при StretchBlt полного изображения и StretchBlt части изображения отличается. Как этого избежать? Т.е., чтобы была возможность перерисовать изображения по частям, причем части изображения могут перекрывать друг друга, и результат не отличался от полной перерисовки? Приложение не использует DirectX и OpenGL. Изображение формируется в памяти, а потом выводится на экран и при этом масштабируется. Если без масштабирования, то перерисовка по частям не вызывает искажений. Не знаю видимо, тут необходима какая то своя функция вывода изображения и StretchBlt не подходит. И это видимо из за того, что соотношение сторон прямоульника (который хранится в памяти и который получается при масштабировании) при полной перерисовке и при частичной, хоть и немного, но отличается. Пример: есть изображение шириной в 80 пикселов. Оно выводится на экран шириной в 100 пикселов. Т.е. коэф. масштабирования 100/85 = 1.25 Теперь необходимо перерисовать часть этого изображения, при этом часть, имеет ширину в 22 пиксела, применяем коэф. 22*1.25 = 27.5. Т.е. изображение должно растянуться на ширину равную 27.5 пикселов, при этом происходит огругление и следствие этого - перерисовка не повторяющая полную перерисовку. Может есть какие то методы для решения данной проблемы? |
|||
|
||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: нет Всего: 92 |
а чего вопрос тут делает тогда? ![]() BitBlt использовать можно попробовать. Один раз растянуть картинку а потом копировать - всю или части. Те один раз рисуем при помощи StretchBlt на контекст в памяти, а затем всегда из него на устройство, еще и работать точно быстрее будет. |
|||
|
||||
vlad21 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 3.10.2007 Репутация: нет Всего: нет |
2 zkv:
Это тема связана с графикой, а раздел форума называется не DirectX/OpenGL, а C/C++: Мультимедия, OpenGL/DirectX. Метод который, Вы, предложили - один раз маштабировать, а потом уже из него копировать не подходит, т.к. изображение формируется с помощью метода, использующего исходный размер (без масштабирования). При масштабировании теряется часть информации (если например происходит уменьшение изображения). Т.е. попиксельно изменяем изображение исходного размера и эту измененную часть переносим, масштабируя на экран. |
|||
|
||||
![]() ![]() ![]() |
Вы можете найти полезным что... | |
|
|
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |