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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2013, 20:24   #1
ijonhson
 
Регистрация: 23.01.2013
Сообщений: 4
По умолчанию попиксельный поворот bitmap

Всем доброго времени суток хотел написать функцию которая вращает bitmap вокруг опорной точки,выбрал попиксельный поворот(а не setworldtransform и др. варианты) так как такую функцию будет лего переписать для поворота любого массива точек,но столкнулся с проблемкой,поворачивать поворачивает да вот не так как хотелось,взгляните свежим взглядом может что-то кинется в глаза.
Вот со-но код:
#define min(a, b) (((a) < (b)) ? (a) : (b))
#define max(a, b) (((a) > (b)) ? (a) : (b))
#pragma hdrstop
#include "Unit2.h"
//-----------------------------------------
Graphics::TBitmap* vRotate(int viAngle,int Xop,int Yop,Graphics::TBitmap *pFromBitmap=new Graphics::TBitmap)
{
Graphics::TBitmap *pToBitmap=new Graphics::TBitmap;
int ngXop = (int)(Xop * sin((float)viAngle * M_PI / 180)),
ngYop = (int)(Yop * cos((float)viAngle * M_PI / 180));
int nX = ngXop - Xop,
nY = ngYop - Yop;
pFromBitmap;
float vfRradians=(2*3.1416*viAngle)/360;
float vfCosinus=(float)cos(vfRradians);
float vfSinus=(float)sin(vfRradians);
pToBitmap->Height=pFromBitmap->Height;
pToBitmap->Width=pFromBitmap->Width;
for(int y = 0;y < pToBitmap->Height; y++)
{
for(int x=0;x<pToBitmap->Width;x++)
{
int pFromBitmapx=(int)((x)*vfCosinus+(y )*vfSinus);
int pFromBitmapy=(int)((y)*vfCosinus-(x)*vfSinus);
pFromBitmapx=pFromBitmapx-nX;
pFromBitmapy=pFromBitmapy-nY;
if(pFromBitmapx>=0&&pFromBitmapx<pF romBitmap->Width&&pFromBitmapy>=0&&
pFromBitmapy<pFromBitmap->Height)
{
pToBitmap->Canvas->Pixels[x][y]=
pFromBitmap->Canvas->Pixels[pFromBitmapx][pFromBitmapy];
}
}
}
return pToBitmap;
}
#pragma package(smart_init)
ijonhson вне форума Ответить с цитированием
Старый 28.02.2013, 11:27   #2
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

Поворачиваешь с угла, а надо от центра
FataLL вне форума Ответить с цитированием
Старый 14.03.2014, 17:32   #3
niixon
Пользователь
 
Регистрация: 03.08.2012
Сообщений: 23
По умолчанию

А если я хочу поворачивать относительно любой точки? Как правильно реализовать, чтобы все изменения правильно были отображены?
niixon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поворот в BitMap Victor1963 Помощь студентам 2 16.11.2011 12:49
поворот изображения на форме (либо поворот файла с картинкой) mystiql Microsoft Office Access 2 21.06.2011 22:03
Попиксельный анализ цвета. Локи Общие вопросы Delphi 13 01.04.2011 11:35
из-за чего появляется полоса (на скрине) при вставке BitMap в TImage? - Проблема с Bitmap Grey@2009 Мультимедиа в Delphi 2 02.01.2010 20:23
Попиксельный доступ к TJPEGImage Serge_Bliznykov Общие вопросы Delphi 4 29.09.2009 22:57