如何提取16bit bmp rgb颜色值
FILE *fp=fopen(bmpName,"rb");
if(fp==0) return 0;
//跳过位图文件头结构BITMAPFILEHEADER
fseek(fp, sizeof(BITMAPFILEHEADER),0);
定义位图信息头结构变量,读取位图信息头进内存,存放在变量head中
BITMAPINFOHEADER head;
fread(&head, sizeof(BITMAPINFOHEADER), 1,fp);
//获取图像宽、高、每像素所占位数等信息
bmpWidth = head.biWidth;
bmpHeight = head.biHeight;
biBitCount = head.biBitCount;
//定义变量,计算图像每行像素所占的字节数(必须是4的倍数)
int lineByte=(bmpWidth * biBitCount/8+3)/4*4;
//灰度图像有颜色表,且颜色表表项为256
//申请位图数据所需要的空间,读位图数据进内存
pBmpBuf=new unsigned char[lineByte * bmpHeight];
fread(pBmpBuf,1,lineByte * bmpHeight,fp);
//关闭文件
fclose(fp);
int i,j;
//每行字节数
int lineByte=(bmpWidth * biBitCount/8+3)/4*4;
int r,g,b;
for(i=0;i<bmpHeight;i++)
{
for(j=0;j<bmpWidth;j++)
{
r=*(pBmpBuf+i*lineByte+j*2);
g=*(pBmpBuf+i*lineByte+j*2+1);
b=*(pBmpBuf+i*lineByte+j*2+2);
}
}
取得的RGB有色差,是什么地方不对。
查BMP文件格式的资料,说16bit图片要设置颜色索引表,但有此资料又说不用,说每5位表示一个rgb分量。
又不是太明白转换原理。
求指点~~~~~