优化日志1

BOOL CFlatDlg::SetWindowRgnByBk()
{
 CRgn  rgn;
 CRect  rc;
 CDC   dcImage;
 CBitmap  *pOldBitmap;
 int   nWidth;
 int   nHeight;
 BITMAP  bm;
 int   row_start;
 int   x, y;
 CRgn  SubRgn;

 HANDLE  hDib;
 BYTE  * pData;
 BYTE  * pCurData;
 int   nOneLineByte;
 COLORREF CurCor;
 int   nHeightDlt;

// GetClientRect(rc);
 rgn.CreateRectRgn(0, 0, 0, 0);

 dcImage.CreateCompatibleDC (NULL);
 pOldBitmap = dcImage.SelectObject(&m_DlgBk);

 m_DlgBk.GetBitmap(&bm);
 nWidth = bm.bmWidth;
 nHeight = bm.bmHeight;

 hDib = DDBToDIB(m_DlgBk, NULL, NULL, 32);
 pData = (BYTE *)hDib + sizeof(BITMAPINFOHEADER);
 nOneLineByte = nWidth * 4;

// DWORD   t1 = GetTickCount();

 for(y=0; y<nHeight; y++)
 {
  row_start = 0;
  nHeightDlt = nOneLineByte * (nHeight-y-1);
  for(x=0; x<nWidth; x++)
  {
#if 1
   pCurData = pData + nHeightDlt + x*4;
   CurCor = *(COLORREF *)pCurData;
#else
   CurCor = dcImage.GetPixel(x, y);
#endif
   if (CurCor != col_trasparant)
    continue;

   if(row_start == x)
   {
    row_start ++;
   }
   else
   {
    SubRgn.CreateRectRgn(row_start, y, x, y+1);
    rgn.CombineRgn(&rgn, &SubRgn, RGN_OR);
    SubRgn.DeleteObject();
    row_start = x+1;
   }
  }

  if (row_start == x)
   continue;

  SubRgn.CreateRectRgn(row_start, y,x, y+1);
  rgn.CombineRgn(&rgn, &SubRgn, RGN_OR);
  SubRgn.DeleteObject();
 }

 GlobalFree(hDib);

// t1 = GetTickCount() - t1;

 SetWindowRgn(rgn, TRUE);

 dcImage.SelectObject(pOldBitmap);
 dcImage.DeleteDC();

 return TRUE;
}

 

#if 1
   pCurData = pData + nHeightDlt + x*4;
   CurCor = *(COLORREF *)pCurData;
#else
   CurCor = dcImage.GetPixel(x, y);
#endif

速度从 1000 ->   15

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值