我有一个24位bmps的工作加载器,但是我下载尝试的图片是8位并且压缩BI_RLE8似乎相当普遍(我不知道2个值之间是否存在相关性?都是8位使用BI_RLE8压缩bmps?),所以我想为它添加功能,但它并没有真正实现。
现在我正在计算颜色数:
numColours = 1 << bitmapInfoHeader.biBitCount;
然后将它们读入彩色平板电脑阵列:
rgbquad = new RGBQUAD[numColours];
in.read((char*)rgbquad, sizeof(RGBQUAD)*numColours);
读取像素
LONG imageSize = (LONG)((float)bitmapInfoHeader.biHeight * (float)bitmapInfoHeader.biWidth * ((float)bitmapInfoHeader.biBitCount/8));
BYTE *bitmapImage=new BYTE[imageSize];
in.seekg(bitmapFileHeader.bfOffBits, std::ios::beg);
in.read((char*)bitmapImage, imageSize);
然后我提取这样的数据
for(int j=0, k = 0; j< bitmapInfoHeader.biHeight; j++){
for(int i=0; i < bitmapInfoHeader.biWidth; i++){
index = ( bitmapInfoHeader.biWidth * j) + i;
pixelMap[index].setR(rgbquad[bitmapImage[k]].rgbRed);
pixelMap[index].setG(rgbquad[bitmapImage[k]].rgbGreen);
pixelMap[index].setB(rgbquad[bitmapImage[k]].rgbBlue);
pixelMap[index].setA(255);
++k;
}
}
一些比较图片:
原始图片:
加载重写后:
我似乎错误地读取了像素,所以有人可以告诉我你是如何加载这些像素的,或者指向我指导的方向吗?