你看一下2.bmp的内容和原先的内容有什么区别(把原先的内容直接调用保存函数保存成2.bmp)

解决方案 »

  1.   

    for(int j=0;j<width;j++)
       {
                
               B=lpBits[i*widthBytes+j*4];
                
               G=lpBits[i*widthBytes+j*4+1];
                
               R=lpBits[i*widthBytes+j*4+2];
                
               lpGray[i*width+j]=(B+G+R)/3;//转化为灰度
                
        }   
    针对32位的位图。有可能你的位图不是32位的。换32位的试试
      

  2.   


    是32位的位图,我取了他的位数的。
    m_hBitmap1 = (HBITMAP)::CreateBitmap(width,height,1,8,lpBits);   //装载位图    
    这边应该是lpGray 
    如果用这个这么写是完全没有问题的m_hBitmap1 = (HBITMAP)::CreateBitmap(width,height,1,32,lpBits);出来的就是原来的BMP文件
    但是   m_hBitmap1 = (HBITMAP)::CreateBitmap(width,height,1,8,lpBits); 把灰度图保存成BMP就是黑色一片,我搞不懂是哪里出现问题了,求大神
      

  3.   

    问题可能出在这句:
    (HBITMAP)::CreateBitmap
    就是建立一个位图的函数,你看一下第4个在参数是什么含义
      

  4.   

    你把CreateBitmap这个函数改成CreateCompatibleBitmap试试,感觉问题还是出在CreateBitmap这个函数上
      

  5.   

    非常感谢兄弟,问题确实在这里,我用直接写32位是可以出来的。但是我把图片转成8位的,用这个方法写8位就出不来,我想这个函数可能是历依赖设备的。所以最后按照BMP图片的格式,自己去写二进制流。先已完成,非常感谢,我想如果用兼容设备API应该也能实现,不过还是自己掌握原理最好。结贴了
      

  6.   

    楼主 可否把你修改后的程序给我发一份 我也遇到了类似的问题  我对一副灰度bmp图进行处理后 想保存为新的bmp图  出来的结果也成了一种色的。多谢