2009. 9. 15. 09:11

Bitmap을 SetPixel로 그리기

ListBox나 ListCtrl등을 상속받아 재정의한 class를 만드는 경우가 있습니다.
그경우, 해당 class의 cpp/h만 있으면, 다른 곳에서도 사용할 수 있어, 그걸 이용한 배포가 가능하죠.
그러나, 상속받은 class에서 bitmap 같은 리소스가 있는 경우,
cpp/h/bmp/resource id 등이 공유되어야 배포가능합니다.

혹시나, bitmap 정보를 cpp로 옮길 수 만 있다면,
cpp/h만 있어도 공유가 가능할 텐데... 라는 아이디어로 만든 툴입니다.

내부에 있는 중요 부분(bmp 정보 구하는 부분)은, 구글링해서 긁어왔는데, 그 출처가 없어서 적지 못하겠네요.
분명, 중국분 블로그였던거 같은데...
혹시 저작권 문제가 될런지... ㅎㅎ


실행후, "Choose BMP"를 하시면,
해당 bmp에 대해, 다음과 같은 정보를 줍니다.
------------
Height=1
Width=307
------------
inline VOID SetPixelTrans(IN CDC* pDC, IN INT nX, IN INT nY, COLORREF clr)
{
 if (clr == RGB(255,0,255))
 {
  return;
 }
 pDC->SetPixel(nX, nY, clr);
}
 SetPixelTrans(pDC,nX+0,nY+0,RGB(61,149,255));
 SetPixelTrans(pDC,nX+1,nY+0,RGB(61,149,255));
 SetPixelTrans(pDC,nX+2,nY+0,RGB(62,149,255));
 SetPixelTrans(pDC,nX+3,nY+0,RGB(62,150,255));
...
cpp에는 위 inline 함수를 포함시키시고,
Bitmap을 그려야 하는 함수,
예를 들어,
VOID DrawBitmapByPixel(INT nX, INT nY, CDC *pDC)
{
}
에 SetPixelTrans(...) 부분들을 복사해 주시면 됩니다.
그러면, 다른 resource 없이 cpp에서 bitmap을 그릴 수 있습니다.
(물론, cpp 사이즈가 굉장히 커질 것입니다.;;)
뭐... 작은 크기의 bmp는 충분히 compact하게 구현될 것입니다.

아참, inline 함수에 RGB(255,0,255)가 transparent pixel입니다.