ugrás a tartalomhoz

Kép forgatása tetszőleges forgatási középponttal

Dj Faustus · 2008. Jún. 16. (H), 15.12
Üdvözletem,
a kérdésem a következő lenne: hogyan lehetne tetszőleges forgatási középponttal (tehát nem a kép közepén levővel, mint ahogy a PHP imagerotate csinálná) elforgatni egy képet? Tudtok erre elegáns megoldást?

Válaszaitokat előre is köszönöm.
 
1

2 megoldás

VBala · 2008. Jún. 17. (K), 08.42
1: létrehozol egy nagyobb vásznat (imagecreatetruecolor), abba belemásolod a képet a középponttól annyival eltolva, amennyivel akarod, és aztán megforgatod az új képet

2: ugyanez, csak előszőr forgatod el, aztán másolod rá a nagyobb vászonra

Lehetséges, hogy valamelyik segédprogrammal (imagemagick, netpbm) egyszerűbben is megoldható, de hirtelen nem tudok kész megoldást mondani velük.

Megj: nem teljesen értem, hogy miért nem jó a középpontos forgatás, mi a célod a tetszőleges középponttal?
(Matematikailag csak annyit a különbség, hogy egy helyvektorral eltolod, és aztán a vektort is forgatod.)
2

Annyit tennék hozzá...

vbence · 2008. Jún. 17. (K), 10.38
hogy a középpont teljesen mindegy a végeredmény szempontjából, a kép teljesen ugyanúgy fog kinézni, csak a helyzete lesz máshol a vásznon. Ha számít a helyzet (pl egy nagyobb kompozíció része a jelelegi kép), akkor elfogatod (középpontosan), az új koordináták pedig:

x = rx - sx
y = ry - sy

ahol rx és ry: az új középpont relatív koordinátái a középponthoz képest (tehát ha a középpont marad, akkor rx=ry=0, ha a kép bal felső sarka, akkor rx = -w/2 ry = -h/2 stb...) valamint:

sx = cos(atan(ry / rx) + alpha) * sqrt(rx^2 + ry^2)
sy = sin(atan(ry / rx) + alpha) * sqrt(rx^2 + ry^2)

ahol apha a forgatás szöge. Az új koordináták az elfogratott kép eltolását jelentik. Nem ellenőriztem a cuccot, úgyhogy nem 100%-os.