switch(Bm.bmBitsPixel)
    {
    case  1:
      {
        for( WY = 0; WY < abs(Bm.bmHeight); WY++ )
        {
          if( bmap.dsBm.bmHeight < 0 )  PY = WY;
          else                   PY = abs(bmap.dsBm.bmHeight) - 1 - WY;
          for( WX = 0; WX < Bm.bmWidth; WX++ )
          {
            cou = (LineWidth * 8 * PY + WX) / 8;//LineWidth位图每行字节数
            csColor = (int)( bitma[counter] >> ( 7 - (WX % 8)) ) % 2;
            csColor = aaa[csColor];     //aaa是个数组
            cou = WY * Bm.bmWidth + WX;
            if( csColor != 1 )  BinaryImage[cou] = 0;
            else                BinaryImage[cou] = 1;
          }
        }
      }
请问这段代码是什么意思呀?请各位大侠指点

解决方案 »

  1.   

    喔,看得头好大啊。
    这段代码不全,而且有问题。
    第一个  cou = (LineWidth * 8 * PY + WX) / 8; 计算后没利用,算了2次 csColor 后又 cou = WY * Bm.bmWidth + WX; 是不是 bitma?[counter] 的counter 就是这个cou?大框架是酱紫滴:
    由于图像数据我们通常访问的时候是按2维数组访问,就是按x方向和y方向循环(这里是先y后x)
            for( WY = 0; WY < Bm.bmHeight; WY++ )
            {
                    for( WX = 0; WX < Bm.bmWidth; WX++ )
                    {
                           ... ...
                    }
             }
    但是图像数据在内存中是1维线性排列的,所以用公式WY * Bm.bmWidth + WX 转换x,y值为1维数组坐标cou,通过这2层循环遍历图像中的每个像素的值BinaryImage[cou]。从switch(Bm.bmBitsPixel)
        case  1:
    可知这段代码是向一个单色位图填充0和1数据,就是BinaryImage[cou] = csColor;(原代码if( csColor != 1 )...)貌似多余了。bitma[counter]意义不明,csColor = (int)( bitma[counter] >> ( 7 - (WX % 8)) ) % 2 感觉是根据bitma[counter]值的奇偶填色,最好说明这段程序的用处是什么。
      

  2.   

    谢谢phinew高手,我已经明白这段代码的大体意思了,只是这两句不太明白:
    cou = (LineWidth * 8 * PY + WX) / 8;
    csColor = (int)( bitma[counter] >> ( 7 - (WX % 8)) ) % 2;
    为什么要这么写呢?请知道的高手帮帮忙
      

  3.   

    cou = (LineWidth * 8 * PY + WX) / 8;好像是画像中每一个位置转化的一维数组的位置
      

  4.   

    csColor = (int)( bitma[counter] >> ( 7 - (WX % 8)) ) % 2;
    那上段代码中这句话是什么意思呢?
      

  5.   

    别叫我高手了,我的vc也是速成的。
    我说过bitma[counter]的意义不明,你要结合其他代码看看。
    如果bitma[counter]的值是1个字节的话,(int)( bitma[counter] >> ( 7 - (WX % 8)) ) % 2 就是从左到右依次读出bitma[counter]每一位的值,为1则BinaryImage[cou]当前位置就为1,为0则BinaryImage[cou]就为0。是不是很罗嗦?所以我也怀疑这句代码到底是做什么的。
    如果你手上的这段程序能运行,就看看运行后实现的是什么结果吧,这样更直观一些