|
int xOrig , yOrig;
double Angolo, cosAngolo, sinAngolo;
RGBTRIPLE *RigaOriginale, *RigaRuotata;
Graphics::TBitmap *MiaBitmap = new Graphics::TBitmap;
MiaBitmap->Width = Image1->Width;
MiaBitmap->Height = Image1->Height;
MiaBitmap->PixelFormat = pf24bit;
for(int Gradi = 0; Gradi <= 360; Gradi++)
{
Angolo = -Gradi * M_PI/180;
sinAngolo = sin(Angolo);
cosAngolo = cos(Angolo);
for ( int y = MiaBitmap->Height-1; y >= 0 ; y--)
{
RigaOriginale = (RGBTRIPLE*)Image1->Picture->Bitmap->ScanLine[y];
RigaRuotata = (RGBTRIPLE*)MiaBitmap->ScanLine[y];
for ( int x = BitmapRotated->Width-1; x >= 0; x--)
{
xOrig = int(x * cosAngolo - y * sinAngolo);
yOrig = int(x * sinAngolo + y * cosAngolo);
if ( (xOrig >= 0) && (xOrig <= Image1->Width-1) &&
(yOrig >= 0) && (yOrig <= Image1->Height-1) )
{
RigaRuotata[x] = RigaOriginale[xOrig];
}
else
{
RigaRuotata[x].rgbtBlue = 0;
RigaRuotata[x].rgbtGreen = 0;
RigaRuotata[x].rgbtRed = 0;
}
}
}
Image2->Picture->Bitmap = MiaBitmap;
|