Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поворот изображения вокруг вертикальной серединной оси [D7, WinXP]


Blind Guardian ©   (2007-10-05 13:22:00) 

Здравствуйте. Такая задача:
Есть картинка. Требуется повернуть её вокруг оси, проходящей вертикально через середину горизонтали картинки.

Это можно сделать выставлением по определенной зависимости цветов на пиксели выходного изображения. Но такой алгоритм будет очень трудоемок.

Намного быстрее, я думаю, с этой задачей может справиться OpenGL или DirectX. Хотел бы попросить написать код программы, делающей этот поворот картинки (думаю, для тех кто умеет пользоваться этими библиотеками, такая задача труда не составит).

На вход подается
bmp:TBitmap - картинка;
Xangle:double - угол, зрения по Ox;
TurnAngle:double - угол, на который нужно повернуть изображение, может принимать только не большие значения.
output:TBitmap - изображение, куда производится вывод

Большое спасибо.


antonn   (2007-10-06 00:43:00) [1]

в данном случае можно без ГДИ+ :)


boa_kaa   (2007-10-06 00:36:00) [2]

GDI+ в данном случае рулит


antonn   (2007-10-05 21:19:00) [3]

аффинное преобразование и перспективное, сканлайн :)
http://desksoft.ru/index.php?downloads=attachments&id=20


Sapersky   (2007-10-05 18:26:00) [4]

В graphics32 есть функция вписывания в произвольный четырёхугольник.


MBo   (2007-10-05 16:55:00) [5]

ах вот что, перспектива нужна...
Тогда можно использовать матрицу перспективного преобразования.
Наверно, OpenGL и DX это умеют делать, но и вручную можно.


Blind Guardian   (2007-10-05 16:25:00) [6]

MBo ©   (05.10.07 16:17) [2]
в том то и дело, что тут сокращения ширины не достаточно. Получается ведь не прямоугольник в конце, а трапеция (при учитывании перспективы).


MBo   (2007-10-05 16:17:00) [7]

Для данного случая достаточно StretchBlt или Canvas.StretchDraw в прямоугольник с сокращенной шириной


Sapersky   (2007-10-05 15:03:00) [8]

OpenGL или DirectX хороши для вывода на экран, а в режиме битмап-битмап софтвер вполне может оказаться быстрее и во всяком случае проще.
для TBitmap должно быть здесь:
http://code.progler.ru/get/252
FastLib (не сравнивал, но наверняка быстрее):
http://sourceforge.net/project/showfiles.php?group_id=173551
Для сравнения - Direct3D, вывод на экран:
http://sapersky.narod.ru/files/D3D7_sprite_sample_04.rar


Наверх

Титульная страница Поиск, карта сайта Написать письмо