|
void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)//
- o. f, M* C8 g- x* [# B7 R) J- n{ 8 x9 x: v3 p5 H5 u# F I
if(angle>180)angle=360-angle; " {1 w) \7 E/ O3 w9 \
if(angle<-180)angle=360+angle;
( P; s K, A4 J" u5 I' P$ [1 Ofloat radians=(2*3.1416*angle)/360; % @& {5 \; e5 p4 j2 e) w6 _
float cosine=(float)cos(radians); 5 M& ?% Y5 ^6 c
float sine=(float)sin(radians); 0 t- K( W- c7 |! m/ U
float Point1x=(-Source->Height*sine); " O: Z+ {* H* J1 d' U
float Point1y=(Source->Height*cosine); : ^' ]5 l: H0 J1 p" m
float Point2x=(Source->Width*cosine-Source->Height*sine);
" k8 ^0 O% L3 \# H7 Hfloat Point2y=(Source->Height*cosine+Source->Width*sine);
" P' g9 f1 z3 f4 ]" xfloat Point3x=(Source->Width*cosine); ) f- T3 }8 m6 ?: c- p$ _
float Point3y=(Source->Width*sine); 0 Z) R6 P: J6 `' ?( q
float minx=min((float)0,min(Point1x,min(Point2x,Point3x)));
$ F4 g# v- |/ E7 B: `. lfloat miny=min((float)0,min(Point1y,min(Point2y,Point3y)));
' I5 W5 b( r* |- afloat maxx=max(Point1x,max(Point2x,Point3x)); 3 M' W; [5 L/ V8 ~
float maxy=max(Point1y,max(Point2y,Point3y));
: c" N) b) o" |7 L, o" lint DestBitmapWidth,DestBitmapHeight;
! A) E* U* ?6 ]1 c& O# Tif(angle>90&&angle<180)
# `! D1 S4 D7 y! K0 Q1 `DestBitmapWidth=(int)ceil(-minx);
5 @5 L8 A6 D/ y6 ]$ felse ( F7 O* m6 \( C3 f$ P! S8 f9 B' \
DestBitmapWidth=(int)ceil(maxx-minx); 3 A; ]9 ]! b, E: k, n8 R' H
if(angle>-180&&angle<-90)
8 O1 ^6 ?" s- _ k0 bDestBitmapHeight=(int)ceil(-miny);
1 p% ^/ t U4 R7 R" y; Telse
7 {# V) c5 i: Y" ?6 sDestBitmapHeight=(int)ceil(maxy-miny);
: C# b5 o% o/ E1 b( a) {NewPic->Height=DestBitmapHeight;
1 C8 u- L; t+ Z3 sNewPic->Width=DestBitmapWidth; $ o3 m3 }* j* ]2 ~4 o
for(int x=0;x<DestBitmapWidth;x++)
9 C5 S9 i' }7 L1 K; i{ * n, G0 g; {$ ?/ q. [
for(int y=0;y<DestBitmapHeight;y++){ : Y5 k4 o L, ~
int SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine); 5 ^- d" }. x) M
int SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine);
' O$ L* [& H& Nif(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&&
) R! C. M9 [2 ~" U0 Z% m! }SrcBitmapy<Source->Height) Z2 A$ B0 s4 j" ~+ b/ K5 f
{
% q1 Q- a2 L9 ]NewPic->Canvas-> ixels[x][y]= 0 W' g- U- K: w
Source->Canvas-> ixels[SrcBitmapx][SrcBitmapy];
. f, q8 S3 A! C! A, o9 d; o- h}
E7 ]5 a2 I' \( \# Y8 N* ~}
4 A' f1 v! {! E& q' |4 f}
# S7 R+ z2 y4 R! x0 U} |