Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перерисовка части изображения (функция StretchBlt) 
:(
    Опции темы
vlad21
Дата 3.10.2007, 07:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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 пикселов, при этом происходит огругление и следствие этого - перерисовка не повторяющая полную перерисовку.

Может есть какие то методы для решения данной проблемы?
PM MAIL   Вверх
zkv
Дата 3.10.2007, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 92



Цитата(vlad21 @  3.10.2007,  07:52 Найти цитируемый пост)
Приложение не использует DirectX и OpenGL.

а чего вопрос тут делает тогда? smile
Цитата(vlad21 @  3.10.2007,  07:52 Найти цитируемый пост)
Может есть какие то методы для решения данной проблемы? 

BitBlt использовать можно попробовать.
Один раз растянуть картинку а потом копировать - всю или части.
Те один раз рисуем при помощи StretchBlt на контекст в памяти, а затем всегда из него на устройство, 
еще и работать точно быстрее будет.
PM MAIL   Вверх
vlad21
Дата 3.10.2007, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 3.10.2007

Репутация: нет
Всего: нет



2 zkv:
Это тема связана с графикой, а раздел форума называется не DirectX/OpenGL, а C/C++: Мультимедия, OpenGL/DirectX.

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

Т.е. попиксельно изменяем изображение исходного размера и эту измененную часть переносим, масштабируя на экран.
 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0598 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.