C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[210] 스플래시 화면띄울때 그래픽 효과 내기
방태윤 [nabty] 8941 읽음    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;jHandle,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; } }
ben [ben82]   2010-05-28 10:57 X
소스코드로 올려주시면 좋은데... 보기 힘드네요..ㅠㅠ

+ -

관련 글 리스트
210 스플래시 화면띄울때 그래픽 효과 내기 방태윤 8941 2001/11/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.