|
BitBlt는 제가 Invalidate를 사용하니까 제대로 되는데
그래도 깜빡이는건 여전하네요...
제발 좀 아시는분 좀 가르쳐주세요...ㅠ.ㅠ
이건 게임 제작에 사용할 맵툴이라 깜빡이면 눈이 너무 피곤 할것 같아
깜빡이는거 꼭 고치고 싶네요
: ........
: void CImgprocess::WorkViewInit(TImage &workview)
: {
: m_WorkView = &workview;
:
: int width,height;
: //WorkView의 크기.
: width = m_WorkView->Width;
: height = m_WorkView->Height;
: m_iWorkWidth = width;
: m_iWorkHeight = height;
: // target비트맵 초기화.
: m_TargetImg->Width = width;
: m_TargetImg->Height = height;
: //모바일에서 사용하는 투명색을 바탕에 칠한다.
: m_TargetImg->Canvas->Brush->Color = TColor(RGB(32,144,32));
: m_TargetImg->Canvas->FillRect(TRect(0,0,width,height));
: WHLineDraw(*m_TargetImg,width,height,m_iTileW,m_iTileH);
: Swap();
: }
:
: // 이미지 컨트롤 바탕을 위에 지정한 색으로 칠하기 위해 비트맵에 가로,세로로 선을 그립니다.
: void CImgprocess::WHLineDraw(TImage& image,int x, int y, int tilewidth, int tileheight)
: {
: image.Canvas->Pen->Style = psDot;
: for(int i=0;i<=x;i+=tilewidth)
: {
: image.Canvas->MoveTo(i,0);
: image.Canvas->LineTo(i,y);
: }
: for(int i=0;i<=y;i+=tileheight)
: {
: image.Canvas->MoveTo(0,i);
: image.Canvas->LineTo(x,i);
: }
:
: }
:
: // 비트맵에 다른 비트맵에서 원하는부분만큼을 지정한 위치에 그립니다.
: void CImgprocess::DrawWorkViewTile(TileInfo& desttile)
: {
: m_ImgMat[m_WorkTilePos.row][m_WorkTilePos.col] = m_ImgTilePos;
: m_TargetImg->Canvas->CopyRect(desttile.rRange,m_SrcBmp->Canvas,
: TRect(0,0,m_iTileW-1,m_iTileH-1));
: Swap();
: }
:
: // 비트맵을 이미지 컨트롤에 그립니다.
: void CImgprocess::Swap()
: {
: if(m_TargetImg == NULL) return;
: BitBlt(m_WorkView->Canvas->Handle, 0,0,
: m_iWorkWidth,m_iWorkHeight,
: m_TargetImg->Canvas->Handle, 0, 0, SRCCOPY);
m_WorkView->Invalidate();
:
: //CopyRect는 깜박임이 있네요.
: //m_WorkView->Canvas->CopyRect(TRect(0,0,m_iWorkWidth,m_iWorkHeight),
: // m_TargetImg->Canvas,TRect(0,0,m_iWorkWidth,m_iWorkHeight));
: }
|