我可以把一幅32位色的BMP图装进CBitmap类,我想把这幅图变成16位色再保存在磁盘上,我该如何做呢?
谢谢!

解决方案 »

  1.   

    首先判断该BMP有没有调色板索引IsIndexed( )
    没有的话很简单,取源图像的RGB值相加除3得到的数作为新位图的像素值即可;
    有的话就设置一下调色板,算法同上。
    主要是使用CImage这个类。
      

  2.   

    首先判断该BMP有没有调色板索引IsIndexed( ) 
    ======================
    256位以上的位图都不用调色板的.
      

  3.   

    不太同意楼上的说法,16位色存在磁盘上是BMP文件,就要符合16位色BMP的结构规定,那就是必须使用调色盘(最多65536个)!
    32位色的位图是没有索引的!取每个象素的RGB算术平均值跟楼主的意图风马牛不相及。
    这个问题在计算机图形学中叫做颜色的量化。就是从32位真彩色里面生成有限颜色集的过程。目前算法很多,但是没有最佳方案。
    比较好的是一种名为“八叉树颜色量化算法”的算法,效果不比PS的次,这个可以去网上找现成的类。
    建好调色板之后,就是找每个像素在调色板里的最佳匹配就行了。
      

  4.   

    Sorry,上面“楼上”指2楼,我编辑的时候还没有看到3楼的,呵呵~~
      

  5.   

    Windows也好,VC也好,只是提供了一个平台,而量化属于计算机图形学的范畴,毕竟Windows是操作系统,而不是图像处理软件。
    类嘛,有的,可以自己来,也可以用现成的。但都不可能在VC IDE里面找到。