偶想做一个百叶窗样子的图形特效Login界面,但是不知道怎样将图形文件转换为数组形式,并且如何才能实现呢??
请给出具体关键部分的源码,谢谢
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//中心扩散--区域实现
Form1->Refresh();
for (int i=0;i<Bitmap->Width/2+3;i++)
{
MyRgn=CreateRectRgn(Bitmap->Width/2-i,Bitmap->Height/2-i*Bitmap->Height/Bitmap->Width,Bitmap->Width/2+i,Bitmap->Height/2+i*Bitmap->Height/Bitmap->Width);
SelectObject(Canvas->Handle,MyRgn);
Canvas->Draw(8,8,Bitmap);
DeleteObject(MyRgn);
}
//复制位图实现
/*int i,left,top,width,height;
Refresh();
width=Bitmap->Width;
height=Bitmap->Height;
//Graphics::TBitmap* pBitmap=new Graphics::TBitmap;
Image1->Visible=false;
for (i = 0; i <= width/2+1; i+=1)
{
//通过图像的坐标选定图像的一部分
left = width/2 - i; //从中心向四周扩散
top = height/2 - i*height/width;
//width = i;
//height = i*height/width;
Canvas->CopyRect(Rect(left+8,top+8,left+2*i+8,top+2*i*height/width+8),Bitmap->Canvas,Rect(left,top,left+2*i,top+2*i*height/width));//从TImage中复制部分位图
} */
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
//百叶窗效果
int inum,icount,i,j;
inum =16; //这是百叶窗的叶数
icount = Bitmap->Height /inum;//每叶的高度
Refresh();
for (i = 0; i < icount+1; i+=1)
{
for (j = 0; j <= inum; j++)
{
Canvas->CopyRect(Rect(8,icount*j+8 , Bitmap->Width+8,icount*j + i+8),Bitmap->Canvas, Rect(0, icount*j ,Bitmap->Width, icount*j + i));
for (int blank=0;blank<100000;blank++);
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
//圆形效果特效
Form1->Refresh();
int j=sqrt(Bitmap->Width*Bitmap->Width+Bitmap->Height*Bitmap->Height)/2+2;
for (int i=1;i<j;i++)
{
MyRgn=CreateEllipticRgn(Bitmap->Width/2-i+8,Bitmap->Height/2-i+8,Bitmap->Width/2+i+8,Bitmap->Height/2+i+8);
SelectObject(Canvas->Handle,MyRgn);
Canvas->Draw(8,8,Bitmap);
DeleteObject(MyRgn);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
//图像从中间往上下分出
int HeightHalf=(Bitmap->Height+1)/2;
TRect Dest1,Dest2,Source1,Source2;
Refresh( );
for(int i=0;i<=HeightHalf;i++)
{
Dest1=Rect(8,HeightHalf-i+8,Bitmap->Width+8,HeightHalf+8);
Source1=Rect(0,0,Bitmap->Width,i);
Dest2=Rect(8,HeightHalf+8,Bitmap->Width+8,HeightHalf+i+8);
Source2=Rect(0,Bitmap->Height-i,Bitmap->Width,Bitmap->Height);
Canvas->CopyRect(Dest1,Bitmap->Canvas,Source1);
Canvas->CopyRect(Dest2,Bitmap->Canvas,Source2);
for(int j=0;j<100000;j++);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
//图像从上下向中间分并
int HeightHalf=(Bitmap->Height+1)/2;
TRect Dest1,Dest2,Source1,Source2;
Refresh( );
for(int i=1;i<=HeightHalf+1;i++)
{
Dest1=Rect(8,i+8,Bitmap->Width+8,8);
Source1=Rect(0,HeightHalf,Bitmap->Width,HeightHalf-i);
Dest2=Rect(8,Bitmap->Height-i+8,Bitmap->Width+8,Bitmap->Height+8);
Source2=Rect(0,HeightHalf,Bitmap->Width,HeightHalf+i);
Canvas->CopyRect(Dest1,Bitmap->Canvas,Source1);
Canvas->CopyRect(Dest2,Bitmap->Canvas,Source2);
for(int j=0;j<100000;j++);
//Bitblt
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button6Click(TObject *Sender)
{
//收缩
Form1->Refresh();
HRGN BmpRgn=CreateRectRgn(8,8,8+Bitmap->Width,8+Bitmap->Height);
for (int i=Bitmap->Width/2+1;i>0;i--)
{
MyRgn=CreateRectRgn(Bitmap->Width/2-i,Bitmap->Height/2-i*Bitmap->Height/Bitmap->Width,Bitmap->Width/2+i,Bitmap->Height/2+i*Bitmap->Height/Bitmap->Width);
CombineRgn(MyRgn,BmpRgn,MyRgn,RGN_XOR);
SelectObject(Canvas->Handle,MyRgn);
Canvas->Draw(8,8,Bitmap);
DeleteObject(MyRgn);
}
}