Ось алгоритм повороту зображення. Нехай O - це центр повороту, а M - якась точка вихідного зображення.
Для кожної точки M потрібно знайти кут alpha між відрізком OM і горизонталлю і довжину r відрізка OM.
Тепер, щоб повернути зображення на кут beta, потрібно кожній точці M
привласнити колір точки вихідного зображення з координатами x, y, де
x = xo + r * cos (alpha + beta)
y = yo + r * sin (alpha + beta)
(Xo, yo - центр повороту, r - довжина відрізка OM).
Важливо саме кожній точці нового зображення зіставляти точку старого зображення,
а не навпаки, тому що то наші люди точки нового зображення залишаться зафарбованими.
Цю програму можна сильно прискорити, якщо вихідне зображення записати в масив і
звертатися до дійсного змінного, а не до властивості Canvas.Pixels.
procedure TForm1. Button1Click # 40; Sender: TObject # 41; ;
bm: = TBitMap. Create;
bm. LoadFromFile # 40; 'Ex.bmp' # 41; ;
xo: = bm. Width div 2;
yo: = bm. Height div 2;
bm1: = TBitMap. Create;
bm1. Width: = bm. Width;
bm1. Height: = bm. Height;
for y: = 0 to bm. Height - 1 do begin
for x: = 0 to bm. Width - 1 do begin
r: = sqrt # 40; sqr # 40; x - xo # 41; + sqr # 40; y - yo # 41; # 41; ;
SinCos # 40; a + arctan2 # 40; # 40; y - yo # 41 ;. # 40; x - xo # 41; # 41 ;. s, c # 41; ;
bm1. Canvas. Pixels # 91; x, y # 93; : = Bm. Canvas. Pixels # 91;
round # 40; xo + r * c # 41 ;. round # 40; yo + r * s # 41; # 93; ;
Form1. Canvas. Draw # 40; xo, yo, bm1 # 41; ;
until Form1. Tag <> 0;