|
답변 감사드립니다~ ^^;
이것저것 많이 얻어가게 되네요~ ^^;
감사합니다~ ^^
이지현 님이 쓰신 글 :
: Graphics32 라이브러리를 사용하신다면...
:
: 먼저 폼 위에 Image32 를 하나 떨궈 놓으시고
: 배경으로 쓸 이미지를 로드 합니다. (Image32란 이름으로 만들어졌다고 칩시다)
: Image32->Bitmap->LoadFromFile("배경화일명"); 하시든지 리소스에서 읽으시든지.. 하죠
: 그리고 나서 Layer 를 하나 올리면 되겠죠
: TBitmapLayer *bmplayer; 같은걸 폼 클래스의 헤더에 선언하시고
: bmplayer = new TBitmapLayer(Image32->Layers); 이렇게 하시면, 레이어가 Image32 위에 한장 올라가죠
: bmplayer->Bitmap->LoadFromFile("프레임화일명"); 하셔서 레이어에 이미지를 부르시고
: TFloatRect L;
: L.Left = 0;
: L.Top = 0;
: L.Right = bmplayer->Bitmap->Width;
: L.Bottom = bmplayer->Bitmap->Height;
: bmplayer->Location = L; 하셔서 레이어의 이미지가 실제 크기대로 나타나게 할 수 있습니다.
: (Location 에 정의된 크기로 이미지가 Stretch 되거든요)
: 프레임이미지가 알파값을 가진 이미지라면,
: bmplayer->DrawMode = dmBlend; 하시면 그 알파값이 그대로 화면에 반영됩니다.
:
: 만약 알파값이 있는 이미지를 사용하기 위해 PNG화일 포멧 같은걸 사용하시고 싶으시면
: 자료실에 있는 GraphicEx 라이브러리를 추가로 깔아주시면 되죠.
:
: Graphics32 라이브러리를 사용하지 않으신다면, 앞서 다른분이 설명해 주신대로 하시면 되죠
: 이 때, 이미지를 32bit 이미지로 관리를 하시는게 편하겠죠. 첫 byte 가 alpha 값이니까요
: 그렇게 하시지 않으신다면 별도로 마스크를 위한 이미지 버퍼를 두셔야 할테구요.
:
: 메모리에서 배경, 프레임 이렇게 두 개의 이미지를 두시고...
: 그게 화면에 그려질 땐 블랜딩해서 그려주는 함수를 하나 두시면 되겠죠.
: int mr = (배경의 빨강 & 알파값(배경은 기본적으로 알파값이 255겠죠? 그렇다면 무시해도 되죠)) +
: (전경의 빨강 & 알파값);
: int mg = (배경의 녹색 ......;
: int mb = (배경의 파랑 ......;
: 처럼 하셔서
: if (mr > 255) mr = 255;
: if (mg > .....;
: if (mb > .....;
: 로 믹스된 점의색이 흰색을 초과해 뒤집어지는걸 막아 주신 다음
: RGB(mr, mg, mb) 하시면 블랜딩 된 점의 색이 나오겠죠.
: RGB는 매크로 함수인데 ((mr << 16) | (mg << 8) | mb) 하셔도 됩니다.
: 이런식으로 두 개의 이미지의 모든 점을 루프돌려 블랜딩하신 후 화면에 그려주면 되겠죠.
:
|