16位位图的格式怎么分析?
能否指个思路,识别所有不同情况的16位位图,并找出R、G、B三个颜色值?

解决方案 »

  1.   

    肯定是要有文件头标明这个文件的RGB是什么格式的阿,没有头文件瞎猜哪能猜的到阿
      

  2.   

    文件肯定有文件头标明这个图片文件的RGB通道是什么格式阿,没有说明瞎蒙阿,那不纯瞎鬼嘛
      

  3.   

    你说的是哪种文件格式阿? JPG?DDS? 网上都有完整的头文件格式说明阿
      

  4.   

    找个开源的位图库比如CImage看看
      

  5.   

    非压缩的16位图一般有两种:RGB565和RGB555。文件头里有关于像素格式的描述。细节可以参考《windows图形编程》
    袁峰 著。
      

  6.   

    同意11楼。要获得R、G、B的值可以用移位语句,这个在《windows图形编程》 里很详细,网上也有电子版下载。此外在《Windows程序设计》里也有详细的描述。
      

  7.   

    大部分和8位一样几个不一样的地方:
    1。分配内存
       8位是(((nWidth*8+31)/32)*4)
       非8位(((nWidnth*24+31)/32)*4)2。指针索引
       相应改变,8位是*pfile or pfile[i*nRows+j]
       16位是 
    *pfile   red
    *(pfile+1)  green
    *(pfile+2)  blue其他:  每行字节,头文件nBitsCount等地方
      

  8.   

     int pitch=width+width%2;  buffer[(y*pitch+x)*2]   buffer[(y*pitch+x)*2+1]
      两个UCHAR内,存放的是(x,y)处的颜色信息
      颜色分离:
        1.若bitmapinfoheader中的biCompression为BI_RGB时,为555格式,分离代码如下:
          UCHAR b=buffer[(i*pitch+j)*2]&0x1F;      UCHAR  g=(((buffer[(i*pitch+j)*2+1]<<6)&0xFF)>>3)+(buffer[(i*pitch+j)*2]>>5);      UCHAR r=(buffer[(i*pitch+j)*2+1]<<1)>>3;
        2.若bitmapinfoheader中的biCompression为BI_BITFIELDS时,在位图数据区域前存在一个RGB掩码的描述 是3个DWORD值,
          我们只需要读取其中的R或者G的掩码,来判断是那种格式。 以红色掩码为例 0111110000000000的时候就是555格式
          1111100000000000就是565格式。 565格式分离代码如下:
          UCHAR  b=buffer[(i*pitch+j)*2]&0x1F;      UCHAR  g=(((buffer[(i*pitch+j)*2+1]<<5)&0xFF)>>2)+(buffer[(i*pitch+j)*2]>>5);      UCHAR  r=buffer[(i*pitch+j)*2+1]>>3;