차이점

이 페이지의 선택한 이전 버전과 현재 버전 사이의 차이점을 보여줍니다.

차이 보기로 연결

독립_animation [2012/07/24 19:06] (현재)
admin 새로 만듦
줄 1: 줄 1:
 +**DLL파일에 에니메이션 비트맵을 넣는 방법**
 +
 +1. 에니메이션 저작 도구(Paint Shop Pro의 Animation Shop, COOL3D 등)를 이용하여 에니메이션을 제작하고, 프레임 별로 각기 다른 이름의 BMP파일로 저장합니다.(위의 두 저작도구는 옵션을 주면 저장 시 자동으로 다른 이름으로 저장 가능함)
 +
 +2. GIF Constructor를 이용하여 모든 파일을 불러 에니메이션을 만들고,  EDIT 메뉴에서 Image Strip을 누고, Horizontal Strip을 선택하고, OK를 누릅니다.
 +
 +3. Paint Shop Pro 등을 이용하여 위에서 작성한 파일을 불러 GIF형식의 파일을 BMP형식의 파일로 바꾸어 저장합니다.
 +
 +4. 자원편집기를 이용하여 DLL파일 속에 포함시킵니다.
 +
 +* 이러한 과정을 거치는 이유는 에니메이션을 만들었을 때 프레임과 프레임 사이의 구분 영역을 없애고, BMP파일로 바꾸어 주기 위해서 입니다.
 +
 +== 세부설명 ==
 +
 +에니메이션 클래스는 한 장의 그림에 여러 동작을 담는 형식입니다.
 +
 +BItMap 작성방법에 대하여 알아보겠습니다.
 +
 +GIF Constructor( 이하 GIFCON )라는 프로그램을 사용하시면 됩니다.
 +
 +http://www.mindworkshop.com/alchemy/gifcon.html에 가시면 Down받으실 수 있습니다.
 +
 +독립 움직이는 BMP 만들기는 기존의 움직이는 GIF를 이용하거나 움직이는 GIF를 만드는 방법을 쓰시면 됩니다.
 +
 +GIFCON 실행후 kitty.gif를 열면 아래와 같은 화면이 나옵니다.
 +
 +{{:0099.jpg|}}
 +
 +다음  EDIT메뉴에 Image Strip을 누르시면 아래와 같은 다이얼로그가 나옵니다.
 +
 +꼭 Horizontal Strip을 선택하시고 OK를 누릅니다.
 +
 +{{:00100.jpg|}}
 +
 +{{:00101.jpg|}}
 +
 +원하시는 이름으로 저장을 합니다. 여기서 잠깐! 왜 유명한 소프트웨어 회사에서는 다른 어려운 파일 포맷은 지원하는데 GIF는 지원하지 않느냐는 의문이 있을 것입니다. 이유는 간단합니다. GIF를 이용할 시에는 GIF를 만든 제작자에게 1Copy당 1~2센트를 지불해야 하고 꼭 프로그램에 “GIF Format은 누구의 것입니다”라고 기재를 해야 한다고 합니다. 그래서 독립라이브러리도 변형된 방법을 선택한 것입니다.
 +
 +Strip된 그림도 역시 GIF입니다. 그러므로 GIF를 BMP로 바꾸어야 합니다. 참고로 프로그래머에게 있어 필요한 Utility를 하나 더 소개할까 합니다. Paint Shop Pro입니다.(이하 PSP)
 +PSP는 그림을 그리는데 사용할 뿐 아니라 다른 그림 포맷으로 전환하여 저장하기, 화면 캡춰 기능이 있습니다. 꼭 하나 정도 가지고 있어야 될 프로그램 중에 하나입니다.
 +
 +www.jasc.com 에 가시면 받으실 수 있습니다.
 +
 + 
 +
 +그럼 최종 결과물은 아래와 같이 됩니다.
 +
 +{{:00102.jpg|}}
 +
 +=== 1. tDrAni2 ===
 +
 +== CLASS OF DLL ==
 +
 +tBitmap
 +
 +일반적으로 그림을 다이얼로그에 표시하듯이 하시면 됩니다. 이때 주의하실 점은 첫 번째 그림만 나오게 SIZE를 조절해주셔야 합니다.
 +
 +== 명령어 설명 ==
 +
 +<code>
 +tDrAni2():New( oBmp, nFrame, nSpeed, oDlg, lTransparent. )
 +</code>
 +
 +<code>
 +oBmp  에니메이션에 사용될 비트맵 Object
 +nFrame 에니매이션 프래임수 예) 위 그림 같은 경우는 8입니다.
 +nSpeed 빠르기입니다. 독립 애니메이션 클래스는 1/1000 초까지 제어가 가능합니다.
 +oDlg    oBmp가 있는 다이얼로그 object입니다.
 +        oDlg는 현재의 oDlg가 아니어도 상관은 없으나 주위 할 점은 화면에 이미 존재하는 Windows나 dialog Object여만 합니다. 윈도우 특성상 화면에 그려져야만 Timer를 쓸 수 있습니다. 그래서 다음 예제에서 ON INIT에서 선언 해주는 이유가 여기에 있습니다.
 +lTransparent는 그림 배경화면을 Dialog색과 같게 해주는 인수로 .t.는 같게 .f.는 무시입니다.
 +</code>
 +
 +== DATA ==
 +
 +<code>
 +oBmp            BITMAP Object
 +nSecond          빠르기
 +oTimer          Timer Object 
 +nTotal          총 Frame수
 +nNow          현재 그려지는 Frame위치
 +</code>
 +
 +== METHOD ==
 +
 +<code>
 +Stop()          동작을 정지시킵니다.
 +Play()          그림을 동작시킵니다.
 +</code>
 +
 +=== 2. tDrAni3 ===
 +
 +== CLASS OF DLL ==
 +
 +tDrani3
 +
 +== 명령어 설명 ==
 +
 +<code>
 +TDrAni3():Redefine( nID, oWnd, cBitmap, nFrames, nSpeed, nTrColor )
 +</code>
 +
 +<code>
 +nID 비트맵 ID
 +oWnd 다이얼로그 object
 +cBitmap 비트맵 자원명(파일명)
 +nFrames 에니매이션 프래임수
 +nSpeed 빠르기, 독립 애니메이션 클래스는 1/1000 초까지 제어가 가능
 +nTrColor 그림 배경화면을 Dialog색과 같게 해줄 색상값
 +</code>
 +
 +== METHOD ==
 +
 +<code>
 +Stop()          동작을 정지시킵니다.
 +Play()          그림을 동작시킵니다.
 +</code>
 +
 +<code>
 +oAni := TDrAni3():Redefine( 7002, oDlg, "B_ANI", 1, 0, nRGB( 28, 26, 27 )  )
 +        프레임 수가 하나인 경우 예( 바탕이 투명이 되게 비트맵을 나타내는 경우)
 +oAni:AddRect( 4, 0, 106, 185, {|| MsgInfo( "Transparent", "Sid!") } )
 +        비트맵을 클릭 시 설명을 나타내는 예제
 +</code>
 +
 +== FUNCTION ==
 +
 +<code>
 +Dr_TrBitmap ( nID, oWnd, cBitmap, nTrColor )
 + 프레임 수가 하나인 경우 사용하는 함수
 +</code>
 +
 +*참고 : TDrAni2()와 TDrAni3()의 차이점
 +
 +TDrAni2()는 DLL파일의 다이얼로그 속의 콘트롤의 크기에 맞추어 에니메이션을 동작 시킬 수 있는 방면 TDrAni3()는 다이얼로그 속의 콘트롤의 크기에 관계없이 비트맵의 크기만큼 에니메이션이 나타난다.
 +
 +NSAMPLES\ANIMATE\SAMANI1.PRG 참조
 +
 +{{:00103.jpg|}}
 +
 +<code>
 +#include "npp.ch"
 +
 +Function Main()
 +
 +      Local oDlg
 +      Local oBmp, oBmp2, oBmp3, oBmp4
 +      Local oAni, oAni2, oAni3, oAni4
 +
 +      SET 3DLOOK ON
 +      SET RESOURCES TO "SAMANI1.DLL"
 +
 +      DEFINE DIALOG oDlg RESOURCE "D_DRANI"
 +
 +             REDEFINE BITMAP oBmp  ID 101 RESOURCE "B_CAT"  OF oDlg
 +             REDEFINE BITMAP oBmp2 ID 102 RESOURCE "B_CAR"  OF oDlg
 +             REDEFINE BITMAP oBmp3 ID 103 RESOURCE "B_GEAR" OF oDlg
 +             REDEFINE BITMAP oBmp4 ID 104 RESOURCE "B_DRL"  OF oDlg
 +
 +      ACTIVATE DIALOG oDlg CENTER ;
 +               ON INIT ( oAni  := tDrAni2():New( oBmp, 8, 100, oDlg,.t. ) ,;
 +                         oAni:Play()                                     ,;
 +                         oAni2 := tDrAni2():New( oBmp2, 10, 100, oDlg   ) ,;
 +                         oAni2:Play()                                    ,;
 +                         oAni3 := tDrAni2():New( oBmp3,  4, 10, oDlg,.t. ) ,;
 +                         oAni3:Play()                                    ,;
 +                         oAni4 := tDrAni2():New( oBmp4, 10, 200, oDlg     ) ,;
 +                         oAni4:Play() )
 +                        // oAni  := tDrAni2():New( oBmp, 8, 100, oDlg,.t. )
 +                        // oAni에 oDlg의 oBmp를 이용해 애니메이션을 초기화하는데
 +                        // Frame은 8장, 빠르기는 100/1000초이며
 +                        // 그림 배경을 다이얼로의 배경색과 동일하게 합니다.
 +
 +      oBmp:End() ; oBmp2:End() ; oBmp3:End() ; oBmp4:End()
 +
 +Return NIL
 +</code>
 +
 +NSAMPLES\ANIMATE\SAMANI2.PRG 참조
 +
 +{{:00104.jpg|}}
 +
 +<code>
 +#include "npp.ch"
 +
 +Function Main()
 +      Local oDlg
 +      Local oAni, oAni2, oAni3
 +      SET 3DLOOK ON
 +      SET RESOURCES TO "SAMANI2.DLL"
 +
 +      DEFINE DIALOG oDlg RESOURCE "D_ANI3"
 +
 +      oAni  := TDrAni3():Redefine ( 7001, oDlg, "B_ANI1", 2, 600, CLR_HCYAN )
 +      oAni2 := TDrAni3():Redefine ( 7002, oDlg, "B_ANI2", 4, 300, nRGB ( 0, 252, 255 ) )
 +      oAni3 := TDrAni3():Redefine ( 7003, oDlg, "B_ANI3", 2, 300, nRGB ( 255, 0, 255 ) )
 +
 +      ACTIVATE DIALOG oDlg CENTER
 +
 +Return NIL
 +</code>
  
 

Link categories 1

Link categories 2