|
void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)//
& T, l9 _4 p0 ?( f6 y{
7 C, Y6 z# g \if(angle>180)angle=360-angle;
- ~0 O" i3 L" ]" Vif(angle<-180)angle=360+angle;
" V$ j3 [+ M- f4 v l5 ifloat radians=(2*3.1416*angle)/360; # H5 k( f1 ^9 j9 M
float cosine=(float)cos(radians);
$ ^9 W) m" N2 b7 T0 x! mfloat sine=(float)sin(radians);
z# t6 \* ^/ S& p8 {* xfloat Point1x=(-Source->Height*sine);
1 m; {; m7 Y/ A' E& g: h* Q4 Ofloat Point1y=(Source->Height*cosine); ( X. N' [ q4 X! r \; ?5 P% U
float Point2x=(Source->Width*cosine-Source->Height*sine); + }- Z) m* n* }& B
float Point2y=(Source->Height*cosine+Source->Width*sine); ( E6 b0 Z- y, \; _. l/ V
float Point3x=(Source->Width*cosine);
3 f( {* `% X9 m4 o; A; ~- afloat Point3y=(Source->Width*sine); % f u+ Q& ^( Z! v
float minx=min((float)0,min(Point1x,min(Point2x,Point3x))); : t0 H. K7 B6 [' }: f7 @
float miny=min((float)0,min(Point1y,min(Point2y,Point3y)));
- [3 e3 J+ J4 t! p* C( zfloat maxx=max(Point1x,max(Point2x,Point3x));
. h4 Z# ?5 b: }1 ]% |- }4 Ifloat maxy=max(Point1y,max(Point2y,Point3y));
9 D5 j. s9 I2 ^( C" Pint DestBitmapWidth,DestBitmapHeight; ! N5 M; E+ y0 A( ^) ?. q! x
if(angle>90&&angle<180) + Y# L! E( q1 g% F/ N- d5 ~; a
DestBitmapWidth=(int)ceil(-minx);
l k {" `# Y- m* f6 ]else
" ~, E2 q! ~3 r7 rDestBitmapWidth=(int)ceil(maxx-minx); + Q: u T* @5 R* \4 J; c
if(angle>-180&&angle<-90) 2 }' I; X! \, y! V) Q# R6 X4 V
DestBitmapHeight=(int)ceil(-miny);
# r {" R7 M5 e0 p' Q6 q8 `else
: p/ f5 t6 P4 M+ x( {, {/ ^. G8 XDestBitmapHeight=(int)ceil(maxy-miny);
8 A3 j9 [6 l- _$ f3 qNewPic->Height=DestBitmapHeight; : e8 L$ Y6 S1 n2 V
NewPic->Width=DestBitmapWidth; " { H5 ]) R) ?7 t
for(int x=0;x<DestBitmapWidth;x++)
* M7 `& S. Y& }( r5 ~{ 8 w% W" w' \7 T& M0 q- C
for(int y=0;y<DestBitmapHeight;y++){
- q6 `2 D7 K9 q; m$ pint SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine);
* r4 w/ |2 a$ I9 l' mint SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine); 6 m7 M6 F q- ~8 Q. u1 @
if(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&&
9 I# V4 _& Z9 h* O9 t" t4 JSrcBitmapy<Source->Height) 6 v3 b1 }1 f" y7 A4 N
{ 0 s$ l4 a8 F0 i
NewPic->Canvas-> ixels[x][y]= 9 A1 J$ W# ]8 p
Source->Canvas-> ixels[SrcBitmapx][SrcBitmapy];
9 ^; F" x) O: ]1 ]+ l+ s: H1 ?) X} 1 k; C" z0 ~# e" l" r: E6 K- P \
}
* ?7 ]- T( ]2 g& f9 J6 ^' [}
# l; g. L# k, E, S} |