24色的bmp每一像素是8位r+8位g+8位b一共需要24位来存储一个像素 比如红色就是FF0000
16位的bmp每一像素用16位表示,具体是5位r+6位g+5位b,这个就可点搞
我现在需要一个算法来转换它们
比如定义一个unsigned char 24bit[3]表示24位的一个像素,unsigned char 16bit[2]表示16位的一个像素
怎么写呢,请教高手,不胜感激

解决方案 »

  1.   

    相关连接:
    http://www.csdn.net/cnshare/soft/10/10423.shtm
    http://www.codeproject.com/bitmap/graphicsuite.asp具体代码:
    void  S_Gray(Graphics::TBitmap *Bmp)//灰阶效果
    {
        long Gray;
        BYTE *ptr;
        for (int y = 0; y < Bmp->Height; y++)
        {
              ptr =(BYTE *) Bmp->ScanLine[y];
              for (int x = 0; x < Bmp->Width*3; x+=3){
                  Gray=299*ptr[x+2]+587*ptr[x+1]
                        +114*ptr[x];
                  ptr[x]=BYTE(Gray/1000);
                  ptr[x+1]=BYTE(Gray/1000);
                  ptr[x+2]=BYTE(Gray/1000);
              }
        }
    }希望能对你有所帮助!!
      

  2.   

    R = (Value & 0x0000F800) >> 8;
    G = (Value & 0x000007E0) >> 3;
    B = (Value & 0x0000001F) << 3;Value = (R & 0x000000F8) << 8 | (G & 0x000000FC) << 3 | (B & 0x000000F8) >> 3;