powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Масштабирование части изображения (StretchBlt)
5 сообщений из 5, страница 1 из 1
Масштабирование части изображения (StretchBlt)
    #34838498
vlad21
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На экран выведено полное изображение с помощью StretchBlt.
Далее идет перерисовка части этого изображения, также, с помощью StretchBlt. В результате получается немного искаженное изображение.
Т.е. результат при StretchBlt полного изображения и StretchBlt части изображения отличается. Как этого избежать? Т.е., чтобы была возможность перерисовать изображения по частям, причем части изображения могут перекрывать друг друга, и результат не отличался от полной перерисовки?
...
Рейтинг: 0 / 0
Масштабирование части изображения (StretchBlt)
    #34839892
1211212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня есть подозрение, что следует изменять весь HBITMAP, а затем выводить целиком. Возможно не так.
...
Рейтинг: 0 / 0
Масштабирование части изображения (StretchBlt)
    #34840755
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad21 wrote:

> В результате получается немного искаженное изображение.
Можно скриншот?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Масштабирование части изображения (StretchBlt)
    #34842535
vlad21
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to 1211212: Не хотелось бы выводить целиком, меняется только часть изображения.
to ErV:
Вот скриншот:

Слева изображение полученное с помощью полной перерисовки, справа по частям(Заполняются цветом квадраты). На этом рисунке видно что изображения отличаются. Именно в тех местах где была частичная перерисовка (синие квадраты).
Изображение формируется в памяти, а потом выводится на экран и при этом масштабируется. Если без масштабирования, то перерисовка по частям не вызывает искажений. Не знаю видимо, тут необходима какая то своя функция масштабирования и StretchBlt не подходит. И это видимо из за того, что соотношение сторон прямоульника (который хранится в памяти и который получается при масштабировании) при полной перерисовке и при частичной, хоть и немного, но отличается.

Пример:
есть изображение шириной в 80 пикселов. Оно выводится на экран шириной в 100 пикселов.
Т.е. коэф. масштабирования 100/85 = 1.25
Теперь необходимо перерисовать часть этого изображения, при этом часть, имеет ширину в 22 пиксела, применяем коэф. 22*1.25 = 27.5. Т.е. изображение должно растянуться на ширину равную 27.5 пикселов, при этом происходит огругление и следствие этого - перерисовка не повторяющая полную перерисовку.
...
Рейтинг: 0 / 0
Масштабирование части изображения (StretchBlt)
    #34843552
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad21 wrote:

> Теперь необходимо перерисовать часть этого изображения, при этом
> часть, имеет ширину в 22 пиксела, применяем коэф. 22*1.25 = 27.5.
Попробуйте рисовать блоками, которые будут иметь целочисленные размеры
до и после масштабирования. Т.е. для 100/85 - это 20/17. Т.е. в этом
случае, чтобы не было искажений, надо рисовать квадратами, которые в
исходном изображении будут 17 пикселей шириной/высотой, а в новом - 20.
Просто StretchBlt дробные размеры использовать не может. (и DDraw,
по-моему, тоже). Т.е. надо или вот такими квадратиками рисовать, или
брать OpenGL или Qt 4, где дробные размеры - не проблема.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Масштабирование части изображения (StretchBlt)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]