Algoritmul de rotație a imaginii, delphisite

Iată algoritmul pentru rotirea imaginii. Fie O centrul de rotație și punctul M al imaginii originale.
Pentru fiecare punct M, trebuie să găsim unghiul α între segmentul OM și orizontala și lungimea r a segmentului OM.






Acum, pentru a roti imaginea la unghiul beta, avem nevoie de fiecare punct M
asociați culoarea punctului din imaginea originală cu coordonatele x, y, unde
x = xo + r * cos (alfa + beta)
y = yo + r * sin (alfa + beta)
(xo, yo este centrul de rotație, r este lungimea segmentului OM).
Este important pentru fiecare punct din noua imagine să compare punctul de veche imagine,
și nu invers, deoarece altfel unele puncte ale imaginii noi vor rămâne neschimbate.






Acest program poate fi accelerat foarte mult dacă imaginea originală este scrisă pe o matrice și
accesați variabila reală, nu proprietatea Canvas.Pixels.

procedura TForm1. Button1Click # 40; Expeditor: TObject # 41; ;

bm: = TBitMap. Creați;

bm. LoadFromFile # 40; 'Ex.bmp' # 41; ;

xo: = bm. Lățimea div 2;

yo: = bm. Înălțime div 2;

bm1: = TBitMap. Creați;

BM1. Lățime: = bm. Lățime;

BM1. Înălțime: = bm. Înălțime;

pentru y: = 0 la bm. Înălțimea - 1 începe

pentru x: = 0 până la bm. Lățime - 1 începe

r: = sqrt # 40; sqr # 40; x - xo # 41; + mp # 40; y-yo # 41; # 41; ;

SinCos # 40; a + arctan2 # 40; # 40; y-yo # 41;. # 40; x - xo # 41; # 41;. s, c # 41; ;

BM1. Canvas. pixeli # 91; x, y # 93; : = bm. Canvas. pixeli # 91;

rotund # 40; xo + r * c # 41;. rotund # 40; yo + r * s # 41; # 93; ;

Form1. Canvas. desena # 40; xo, yo, bm1 # 41; ;

până la Form1. etichetă <> 0;







Trimiteți-le prietenilor: