现在手头有个古灵精怪的需求,有这样一个单色位图要旋转之后也存成单色
位图提供给用户:- pBmiSrc
    - bmiHeader
         biSize 40
         biWidth 966
         biHeight 576
         biPlanes 1
         biBitCount 16
         biCompression 3
         biSizeImage 0
         biXPelsPerMeter 3780
         biYPelsPerMeter 3780
         biClrUsed 0
         biClrImportant 0
    - bmiColors[0]
            rgbBlue 0
     rgbGreen 0
         rgbRed 0
         rgbReserved 0 只要求旋转90度、180度之类,算法倒是不复杂,讨厌在DIB的结构我没玩转。想
用一个个象素的读写搞定,failed。放大缩小倒是用strechblt很容易实现。工程限制不能使用MFC,我用的方法是利用CImage,它的save函数野蛮到不管
源文件格式,硬存成16M色,多出一个怎样把它转换成单色的问题。要是可以
直接存成单色文件那就更好了,现在我挠头不知何处下嘴。各位请指点一二,
不胜感激。想象中的完成样子:
    CImage BmpSrc,BmpDst;   HBITMAP hBmpDst;
    HRESULT res=BmpSrc.Load("e:\\1.bmp");
    clr1=0xffffff; //背景色
    hBmpDst=GetRotatedBitmap(BmpSrc,-PI/2.0,clr1);
    if(hBmpDst)BmpDst.Attach(hbmpd);
    if(!BmpDst.IsNull())res=BmpDst.Save("e:\\1r.bmp");

解决方案 »

  1.   

    256 色的倒是做过
    不过那是在学校
    查找一些关于 BMP 的文件格式不就行了吗!
      

  2.   

    MS的BMP的data只是把标准RGB data每一象素的R和B调转
    方法:
    把BMP读出,不需理会fileheader和infoheader。
    剩下的data就把R和B位置调转,就是一个RGB的buffer(可以做相应的操作)。save时是相反的步骤。
      

  3.   

    发贴子发到Visual C++论坛去吧
      

  4.   

    多谢各位挂心,skqgd能说详细些否(给个RGB类操作的两三行例子?)Liubear,这里不是Visual C++论坛吗?我找来找去CSDN就找到这一个
    论坛谈VC++啊。
      

  5.   

    哦,我发到“C/C++”去了。现在转移...还在找解决方法。发现“存成单色位图”好像比较少人说,
    旋转比较多人说。特别是不用考虑抖动的,原用色就仅是
    黑白的彩色位图,怎么存成1bit的黑白位图。希望大家出主意,精神上物理上都多谢了
      

  6.   

    不知道这两个例子对你的单色图像旋转有没有什么帮助
    http://www.codeguru.com/bitmap/rotate_bitmap.shtml
    http://www.codeguru.com/bitmap/RotateByShear.shtml
      

  7.   

    两个例子看过了,第一个例子好些,但它两套函数中对应NT的我会用,对应Win32的
    我没试成功。即怎样调用下面一个函数来对“E:\\1.bmp”来操作?// GetRotatedBitmap - Create a new bitmap with rotated image
    // Returns - Returns new bitmap with rotated image
    // hDIB - Device-independent bitmap to rotate
    // radians - Angle of rotation in radians
    // clrBack - Color of pixels in the resulting bitmap that do
    //   not get covered by source pixels
    HANDLE GetRotatedBitmap( HANDLE hDIB, float radians, COLORREF clrBack )若说明之外给出成功例子code加送50略表寸心,感谢另外“存为单色位图”没找到解决法子。心里不禁有小小恨MS,作CImage的时候也不想想
    Save()多做几个参数选择,一存就存成16M。^_^,微软好惨,玩笑玩笑
      

  8.   

    先散一半分吧,大家可以帮我看看有什么法子解决
    “ 16Mbit的HBITMAP -> 存成单色位图文件 ”的问题
     ,给予剩下的分数;
    (等价问题 "单色位图文件 - 旋转 -单色位图文件“)
    多谢先~~~