700*1000像素,处理一次要用270毫秒,太慢了。请大家帮忙,看看有没有别的方法。

解决方案 »

  1.   

    和Excel的半透明处理相比,这太慢了。
    要Excel也这速度,谁还用Excel呀。
      

  2.   

    我如何得到,存有像素颜色值的地址呢?用GetPixel速度更慢。
      

  3.   

    Excel那个是半透明么,其实不是,我以前做过类似的效果,就是用Brush画了一下,
    SetROP2(R2_MASKPEN)
      

  4.   

    我的代码大概是这样
    CBrush br;
    br.CreateSolidBrush(RGB(128,128,128));
    CBrush* pOldBr = (CBrush* )pMemDC->SelectObject(&br);
    int o2;
    RGBQUAD rgb;
             //rgb是背景色
    if((unsigned int)rgb.rgbBlue+(unsigned int)rgb.rgbRed+(unsigned int)rgb.rgbGreen > 500)
    o2 = pMemDC->SetROP2(R2_MASKPEN);
    else
    o2 = pMemDC->SetROP2(R2_MERGEPEN); CPen* pOldPen = (CPen* )pMemDC->SelectObject(CPen::FromHandle((HPEN)GetStockObject(NULL_PEN)));
    pMemDC->Rectangle(nLeft, nTop+1, nRight, nBottom-1);
    pMemDC->SetROP2(o2);
      

  5.   

    R2_MASKPEN是作逻辑与操作。
    您的代码只是仿半透明,对于黑色字体没有效果。而Excel却可以改变,可见Excel是用半透明的处理方法。仍然感谢您的回答,我怎么给你分呢?
      

  6.   

    对于黑色字体没有效果,呵呵,那么R2_XORPEN或R2_NOT怎么样,ROP2仅仅适用于简单实体(线,矩形)
    对复杂背景的叠加,如果涉及到文字对文字,位图对位图的叠加,那么ROP2就无效了,你所说的选种效果,我相信一定是用ROP2