Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2012, 12:14   #1
kordax
 
Регистрация: 18.01.2012
Сообщений: 5
По умолчанию Поворот изображения, матрица поворота (C++)

Интересует сабж.
Делать данное собираюсь в Visual C++.
Нагуглил многое про поворот изображений впринципе, а также про интерполяцию, однако про матрицу поворота известно мне немного.
Пытался вникнуть, но никак не могу понять общий смысл этого дела.
Есть у кого-нибудь хотя-бы простейший алгоритм поворота бмпшки на 90 градусов (или произвольный угол), единожды и при помощи матриц поворота?
Буду признателен за помощь.

Последний раз редактировалось kordax; 18.01.2012 в 21:57.
kordax вне форума Ответить с цитированием
Старый 18.01.2012, 12:26   #2
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

Visual Basic C++
Извините, все таки Васик или Си?
http://www.codeguru.com/Cpp/G-M/bitm...cle.php/c1747/
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 18.01.2012, 12:30   #3
kordax
 
Регистрация: 18.01.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Zer0 Посмотреть сообщение
Visual Basic C++
Извините, все таки Васик или Си?
http://www.codeguru.com/Cpp/G-M/bitm...cle.php/c1747/
Васик написал не пойми зачем, Си конечно.
Спасибо за ссылку, но в данном методе используются свои хитрые алгоритмы, мне же дано задание сделать это при помощи матриц поворота.

Цитата:
Next, you instantiate your derived class and call the AllocAndRotate(...) function which allocates a new destination bitmap buffer and rotates the input image into it.
Я с данной функцией не знаком и сомневаюсь что она имеет что-то общее с матрицей поворота.
Если это разбирать, то уйдёт не одна неделя.
kordax вне форума Ответить с цитированием
Старый 18.01.2012, 12:50   #4
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

Ну на самом деле вся суть в том, что:
0) Вычисляем матрицу поворота:

Где - угол поворота в радианах (перевести градусы в радианы просто - 180*градус/Пи)
Теперь проходимся циклом по точкам изображения
1) Берем точку
2) Формируем из ее координат вектор
3) Умножаем вектор на матрицу поворота (формулы несложные, просто поищите как умножить матрицу (2х2) на вектор (2)) - новый вектор это новые координаты точки

Код получается не очень сложный
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 18.01.2012, 13:06   #5
kordax
 
Регистрация: 18.01.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Zer0 Посмотреть сообщение
1) Берем точку
2) Формируем из ее координат вектор
Если код несложный, не могли бы вы помочь с этими двумя пунктами ?
kordax вне форума Ответить с цитированием
Старый 18.01.2012, 13:38   #6
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

Извините, не помогу - не на чем проверять, да и подзабыта часть)
Хотя...
Код:
void RotateImage (int angle, int offsetX, int offsetY, Graphics* img, newImg) {
double aRad = 180*angle/3.1415;
double rMx[2][2] = ((Math.Cos(aRad),-Math.Sin(aRad)),(Math.Sin(aRad),Math.Cos(aRad));
for (int y=0; y<img.Height; y++)
 for (int x=0; x<img.Width; x++) {
 int tx = (x-offsetX)*rMx[0][0] + (y-offsetY)*rMx[0][1] + offsetX;
 int ty = (x-offsetX)*rMx[1][0] + (y-offsetY)*rMx[1][1] + offsetY;
 //нужно в точку (tx,ty) в newImg поместить точку (x,y) из img
}
}
Не принимайте код как данность, тут только суть алгоритма
P.S. Похоже пора снова изучать плюсы :D ничего не помню
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 18.01.2012, 13:42   #7
kordax
 
Регистрация: 18.01.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Zer0 Посмотреть сообщение
Извините, не помогу - не на чем проверять, да и подзабыта часть)
Хотя...
Код:
void RotateImage (int angle, int offsetX, int offsetY, Graphics* img, newImg) {
double aRad = 180*angle/3.1415;
double rMx[2][2] = ((Math.Cos(aRad),-Math.Sin(aRad)),(Math.Sin(aRad),Math.Cos(aRad));
for (int y=0; y<img.Height; y++)
 for (int x=0; x<img.Width; x++) {
 int tx = (x-offsetX)*rMx[0][0] + (y-offsetY)*rMx[0][1] + offsetX;
 int ty = (x-offsetX)*rMx[1][0] + (y-offsetY)*rMx[1][1] + offsetY;
 //нужно в точку (tx,ty) в newImg поместить точку (x,y) из img
}
}
Спасибо, уже что-то. Я не занимался этим делом два года.
Цитата:
P.S. Похоже пора снова изучать плюсы :D ничего не помню
Тоже самое, поэтому и попросил здесь помощи!

Последний раз редактировалось kordax; 18.01.2012 в 21:47.
kordax вне форума Ответить с цитированием
Старый 19.01.2012, 23:14   #8
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

http://www.codeguru.com/Cpp/G-M/bitm...icle.php/c1743
Vago вне форума Ответить с цитированием
Старый 19.01.2012, 23:20   #9
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

kordax, хватит плодить мусорные сообщения. На этом форуме НЕ ПРИНЯТО апать темы. Не нарывайтесь на штраф.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 19.01.2012, 23:21   #10
kordax
 
Регистрация: 18.01.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Vago Посмотреть сообщение
Спасибо друг, очень кстати, но не мог бы ты подсказать с конкретной реализацией?
Я программированием занимался лишь для расчёта матриц и никогда с подобным дела не имел.

Последний раз редактировалось kordax; 20.01.2012 в 01:48.
kordax вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поворот изображения на форме (либо поворот файла с картинкой) mystiql Microsoft Office Access 2 21.06.2011 22:03
Непонятки с DirectX (матрица поворота, камера, матрица проекции) ROD Общие вопросы C/C++ 2 17.09.2010 17:00
поворот изображения DeDoK Общие вопросы Delphi 4 06.09.2010 21:34
Поворот изображения Djony_91 Мультимедиа в Delphi 1 26.05.2010 16:15
Процедура поворота изображения Илья PHoeNiX Общие вопросы Delphi 3 08.06.2008 13:59