|
void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)//
4 A/ q5 {' {7 \) x( l+ y7 h{
. m, c7 y1 J( ^* n/ I1 T" I. fif(angle>180)angle=360-angle; , F" R: ^( N5 E8 R" y
if(angle<-180)angle=360+angle; 1 X) D8 ^7 l2 t3 h
float radians=(2*3.1416*angle)/360; % i# g% r+ A/ L; M" f% H
float cosine=(float)cos(radians);
6 m, E3 \# @5 o$ F3 zfloat sine=(float)sin(radians);
( g" a4 [. b2 t9 \( _float Point1x=(-Source->Height*sine);
' c: E7 N7 [6 W% e) \* d8 M/ C; Kfloat Point1y=(Source->Height*cosine); % F B4 Z" {* x4 M% ~6 E; H$ o
float Point2x=(Source->Width*cosine-Source->Height*sine); 0 }3 B3 i& }' a8 g. B
float Point2y=(Source->Height*cosine+Source->Width*sine); . P, {& Z5 X+ X; _* U
float Point3x=(Source->Width*cosine); 3 `) i: U( h6 m" X5 ]
float Point3y=(Source->Width*sine); ' J% i2 o4 ?) d0 P1 k& Q
float minx=min((float)0,min(Point1x,min(Point2x,Point3x))); ( w- V6 ~3 d" i
float miny=min((float)0,min(Point1y,min(Point2y,Point3y)));
; R, C9 R+ _) g" Yfloat maxx=max(Point1x,max(Point2x,Point3x)); / Y# p' B) P4 y& l' a
float maxy=max(Point1y,max(Point2y,Point3y)); 1 t( Q. O! U: h; W; E7 D8 X/ l* O3 p6 Z# @
int DestBitmapWidth,DestBitmapHeight; 5 H$ B+ ]6 w/ L/ u7 n& M, |0 r. I
if(angle>90&&angle<180)
3 l, q# K# y/ o+ _8 C3 g8 _DestBitmapWidth=(int)ceil(-minx); # p/ L9 } l( p! l
else - L$ S3 d; a/ D, Z( u- M
DestBitmapWidth=(int)ceil(maxx-minx);
. M, B) [( W8 X$ L8 {) t! Sif(angle>-180&&angle<-90)
$ w/ j& n/ Y4 D% k, R4 `. nDestBitmapHeight=(int)ceil(-miny); 6 l4 _+ A6 n5 b+ I! c/ y( \4 b$ S: v
else ! `- `2 t Y9 j) i
DestBitmapHeight=(int)ceil(maxy-miny); ! i0 S4 X- P8 h& m# g( p3 D
NewPic->Height=DestBitmapHeight; 3 u) v7 X3 l/ h- I% E
NewPic->Width=DestBitmapWidth;
8 [; G6 ~2 G1 afor(int x=0;x<DestBitmapWidth;x++)
; i: K% i4 [. p/ e; X/ `+ U{ 6 B# Q U( K t9 \
for(int y=0;y<DestBitmapHeight;y++){
$ T ?: u. L2 Jint SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine);
% ^ D3 ]" @4 A- \int SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine);
( [! j o+ U" kif(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&&
. H; P1 w/ ]% ^: i- CSrcBitmapy<Source->Height)
8 @! V6 |! a' p4 l4 K{
4 Y9 I* p# Q& O+ i- c* pNewPic->Canvas-> ixels[x][y]=
+ G1 z3 u1 a7 XSource->Canvas-> ixels[SrcBitmapx][SrcBitmapy];
2 @+ p/ j" _6 Q( \; A* T} ~0 k8 @2 C* K5 B) g8 A' K
} , `# k" }' e6 r9 ]6 ?, q3 t# U% V
}
4 _$ J! T" n4 O- \" F- j- ^" ^} |