|
[210] 스플래시 화면띄울때 그래픽 효과 내기 |
방태윤 [nabty]
|
9565 읽음 2001-11-01 21:17 |
스플래시 화면같은거 띄울때 그래픽효과 낼때나
이미지를 교체할때 사용하면 좋을것 같습니다.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i,j;
Graphics::TBitmap*a[5];
AnsiString fn[5]={
"C:\\Program Files\\Common Files\\Borland Shared\\Images\\Splash\\256Color\\chemical.bmp",
"C:\\Program Files\\Common Files\\Borland Shared\\Images\\Splash\\256Color\\factory.bmp",
"C:\\Program Files\\Common Files\\Borland Shared\\Images\\Splash\\256Color\\finance.bmp",
"C:\\Program Files\\Common Files\\Borland Shared\\Images\\Splash\\256Color\\handshak.bmp",
"C:\\Program Files\\Common Files\\Borland Shared\\Images\\Splash\\256Color\\shipping.bmp"
};
for(int i=0;i<5;i++){
a[i]=new Graphics::TBitmap();
a[i]->LoadFromFile(fn[i]);
}
int w=a[0]->Width;
int h=a[0]->Height;
Graphics::TBitmap*p;
int b=0;
{
p=a[b++%5];
for(j=0;j<w;j+=2){
for(i=0;i<w-j;i+=2){
BitBlt(Canvas->Handle,w-i-1,0,2,h,p->Canvas->Handle,j,0,cmSrcCopy);
}
BitBlt(Canvas->Handle,j,0,2,h,p->Canvas->Handle,j,0,cmSrcCopy);
}
BitBlt(Canvas->Handle,0,0,w,h,p->Canvas->Handle,0,0,cmSrcCopy);
Sleep(100);
p=a[b++%5];
for(j=0;j<w;j+=2){
for(i=0;i<w-j;i+=2){
BitBlt(Canvas->Handle,i,0,2,h,p->Canvas->Handle,p->Width-1-j,0,cmSrcCopy);
}
BitBlt(Canvas->Handle,w-1-j,0,2,h,p->Canvas->Handle,w-1-j,0,cmSrcCopy);
}
BitBlt(Canvas->Handle,0,0,w,h,p->Canvas->Handle,0,0,cmSrcCopy);
Sleep(100);
p=a[b++%5];
for(j=0;j<h;j++){
for(i=0;i<h-j;i++){
BitBlt(Canvas->Handle,0,h-i-1,w,1,p->Canvas->Handle,0,j,cmSrcCopy);
}
}
BitBlt(Canvas->Handle,0,0,w,h,p->Canvas->Handle,0,0,cmSrcCopy);
Sleep(100);
p=a[b++%5];
for(j=0;j<h;j++){
for(i=0;i<h-j;i++){
BitBlt(Canvas->Handle,0,i,w,1,p->Canvas->Handle,0,p->Height-1-j,cmSrcCopy);
}
}
BitBlt(Canvas->Handle,0,0,w,h,p->Canvas->Handle,0,0,cmSrcCopy);
Sleep(100);
}
{
p=a[b++%5];
for(j=0;j<w;j+=4){
BitBlt(Canvas->Handle,w-j,0,j,h,p->Canvas->Handle,0,0,cmSrcCopy);
}
BitBlt(Canvas->Handle,0,0,w,h,p->Canvas->Handle,0,0,cmSrcCopy);
Sleep(100);
p=a[b++%5];
for(j=0;j<w;j+=4){
BitBlt(Canvas->Handle,j+4,0,w-j,h,Canvas->Handle,j,0,cmSrcCopy);
BitBlt(Canvas->Handle,0,0,j,h,p->Canvas->Handle,0,0,cmSrcCopy);
}
BitBlt(Canvas->Handle,0,0,w,h,p->Canvas->Handle,0,0,cmSrcCopy);
Sleep(100);
p=a[b++%5];
for(j=0;j<w;j+=4){
BitBlt(Canvas->Handle,0,0,j,h,p->Canvas->Handle,w-j,0,cmSrcCopy);
}
BitBlt(Canvas->Handle,0,0,w,h,p->Canvas->Handle,0,0,cmSrcCopy);
Sleep(100);
p=a[b++%5];
for(j=0;j<w;j+=4){
BitBlt(Canvas->Handle,0,0,w-j,h,Canvas->Handle,4,0,cmSrcCopy);
BitBlt(Canvas->Handle,w-j,0,j,h,p->Canvas->Handle,w-j,0,cmSrcCopy);
}
BitBlt(Canvas->Handle,0,0,w,h,p->Canvas->Handle,0,0,cmSrcCopy);
Sleep(100);
p=a[b++%5];
for(j=0;j<h;j+=2){
BitBlt(Canvas->Handle,0,h-j,w,j,p->Canvas->Handle,0,0,cmSrcCopy);
}
BitBlt(Canvas->Handle,0,0,w,h,p->Canvas->Handle,0,0,cmSrcCopy);
Sleep(100);
p=a[b++%5];
for(j=0;j<h;j+=2){
BitBlt(Canvas->Handle,0,0,w,j,p->Canvas->Handle,0,h-j,cmSrcCopy);
}
BitBlt(Canvas->Handle,0,0,w,h,p->Canvas->Handle,0,0,cmSrcCopy);
Sleep(100);
}
{
p=a[b++%5];
int size=4;
int dot_x=size;
int dot_y=size;
int x_cnt=p->Width/dot_x;
int y_cnt=p->Height/dot_y;
if(p->Width%dot_x) x_cnt++;
if(p->Height%dot_y) y_cnt++;
int cnt=x_cnt*y_cnt;
int *pos;
pos = new int[cnt];
for(i=0;i<cnt;i++) pos[i]=i;
for(i=0;i<cnt;i++){
int a=random(cnt);
int k=pos[i];
pos[i]=pos[a];
pos[a]=k;
}
p=a[b++%5];
int old_tick=0;
i=0;
while(true)
{
int n=GetTickCount();
if(n-old_tick>8){
int k=80;
while(k>0)
{
int cp=pos[i];
int y=cp/x_cnt;
int x=cp%x_cnt;
BitBlt(Canvas->Handle,x*dot_x,y*dot_y,dot_x,dot_y,p->Canvas->Handle,x*dot_x,y*dot_y,cmSrcCopy);
old_tick=n;
i++;
k--;
}
}
if(i>=cnt) break;
}
delete[] pos;
BitBlt(Canvas->Handle,0,0,w,h,p->Canvas->Handle,0,0,cmSrcCopy);
Sleep(100);
}
{
p=a[b++%5];
int old_tick=0;
i=0;
while(true)
{
int n=GetTickCount();
if(n-old_tick>40){
for(j=0;j<w;j+=16){
BitBlt(Canvas->Handle,j+i,0,1,h,p->Canvas->Handle,j+i,0,cmSrcCopy);
}
old_tick=n;
i++;
if(i>=15)break;
}
}
BitBlt(Canvas->Handle,0,0,w,h,p->Canvas->Handle,0,0,cmSrcCopy);
Sleep(100);
}
{
p=a[b++%5];
int old_tick=0;
int a[4]={1,1,2,4};
int pos[16]={0,0,0,0,4,0,0,0,2,6,0,0,1,3,5,7};
for(int i=0;i<4;i++){
for(int j=0;j Handle,k+pos[i*4+j],0,1,h,p->Canvas->Handle,k+pos[i*4+j],0,cmSrcCopy);
}
}
while(true)
{
int n=GetTickCount();
if(n-old_tick>120){
old_tick=n;
break;
}
}
}
BitBlt(Canvas->Handle,0,0,w,h,p->Canvas->Handle,0,0,cmSrcCopy);
Sleep(100);
}
{
p=a[b++%5];
int old_tick=0;
int a[4]={1,1,2,4};
int pos[16]={0,0,0,0,4,0,0,0,2,6,0,0,1,3,5,7};
for(int i=0;i<4;i++){
for(int j=0;jHandle,0,k+pos[i*4+j],w,1,p->Canvas->Handle,0,k+pos[i*4+j],cmSrcCopy);
}
}
while(true)
{
int n=GetTickCount();
if(n-old_tick>120){
old_tick=n;
break;
}
}
}
BitBlt(Canvas->Handle,0,0,w,h,p->Canvas->Handle,0,0,cmSrcCopy);
}
for(int k=0;k<1;k++){
{
p=a[b++%5];
RECT r=TRect(0,0,w,h);
for(j=0;jHandle,4,0,0,&r,0,0);
BitBlt(Canvas->Handle,0,0,4,h,p->Canvas->Handle,w-j,0,cmSrcCopy);
Sleep(5);
}
BitBlt(Canvas->Handle,0,0,w,h,p->Canvas->Handle,0,0,cmSrcCopy);
}
{
p=a[b++%5];
RECT r=TRect(0,0,w,h);
for(j=0;jHandle,-4,0,0,&r,0,0);
BitBlt(Canvas->Handle,w-4,0,4,h,p->Canvas->Handle,j,0,cmSrcCopy);
Sleep(5);
}
BitBlt(Canvas->Handle,0,0,w,h,p->Canvas->Handle,0,0,cmSrcCopy);
}
}
Graphics::TBitmap*temp,*temp2=p,*temp3;
{
p=a[b++%5];
RECT r=TRect(0,0,w,h);
RECT d;
for(j=100;j>=1;j--){
d=r;
InflateRect(&d,-w/2*j/100,-h/2*j/100);
StretchBlt(
Canvas->Handle,
d.left,d.top,d.right-d.left,d.bottom-d.top,
p->Canvas->Handle,0,0,w,h,
cmSrcCopy
);
Sleep(1);
}
BitBlt(Canvas->Handle,0,0,w,h,p->Canvas->Handle,0,0,cmSrcCopy);
}
{
temp=new Graphics::TBitmap();
temp->Width=w;
temp->Height=h;
// p=a[b++%5];
RECT r=TRect(0,0,w,h);
RECT d;
for(j=1;j<=100;j++){
BitBlt(temp->Canvas->Handle,0,0,w,h,temp2->Canvas->Handle,0,0,cmSrcCopy);
d=r;
InflateRect(&d,-w/2*j/100,-h/2*j/100);
StretchBlt(
temp->Canvas->Handle,
d.left,d.top,d.right-d.left,d.bottom-d.top,
p->Canvas->Handle,0,0,w,h,
cmSrcCopy
);
BitBlt(Canvas->Handle,0,0,w,h,temp->Canvas->Handle,0,0,cmSrcCopy);
Sleep(1);
}
// BitBlt(Canvas->Handle,0,0,w,h,p->Canvas->Handle,0,0,cmSrcCopy);
delete temp;
}
p=a[(b-2)%5];
{
// p=a[b++%5];
temp3=new Graphics::TBitmap();
temp3->Width=w;
temp3->Height=h;
temp2=new Graphics::TBitmap();
temp2->Width=w;
temp2->Height=h;
temp=new Graphics::TBitmap();
temp->Width=w;
temp->Height=h;
temp->Canvas->Font->Size=128;
temp->Canvas->Font->Color=clLime;
temp->Canvas->TextOut(50,0,"끝");
RECT r=TRect(0,0,w,h);
RECT d;
for(j=100;j>=1;j--){
temp2->Transparent = false;
d=r;
InflateRect(&d,-w/2*j/100,-h/2*j/100);
StretchBlt(
temp2->Canvas->Handle,
d.left,d.top,d.right-d.left,d.bottom-d.top,
temp->Canvas->Handle,0,0,w,h,
cmSrcCopy
);
temp2->Transparent = true;
temp2->TransparentColor = temp2->Canvas->Pixels[0][0];
temp3->Canvas->Draw(0,0,p);
temp3->Canvas->Draw(0,0,temp2);
Canvas->Draw(0,0,temp3);
Sleep(1);
}
delete temp;
delete temp2;
delete temp3;
}
}
|
관련 글 리스트
|