我正在编写一个 C++ 命令行应用程序,它将 Haar 变换应用于 bmp 图像的像素。我已经成功地提取了标题信息并确定了像素的字节数组大小。用文件中的像素数据填充 char[pixelHeight][rowSizeInBytes] 后,我将每个像素(我正在使用的 bmp 的 24 位)读入一个向量。它正在我的机器上运行,但我想知道我将表示像素的 char 数组转换为 unsigned int 的实现是否安全和/或惯用的 C++ 方式。我假设一个小端架构。
unsigned char pixelData[infoHeader->pixelHeight][rowSize];
fseek(pFile, basicHeader->pixelDataOffset, SEEK_SET);
fread(&pixelData, pixelArraySize, 1, pFile);
for(int row = 0; row < infoHeader->pixelHeight; row++)
{
for(int i = 0; i < rowSize; i = i + 3)
{
unsigned char blue = pixelData[row][i];
unsigned char green = pixelData[row][i + 1];
unsigned char red = pixelData[row][i + 2];
char vals[4];
vals[0] = blue;
vals[1] = green;
vals[2] = red;
vals[3] = '\0';
unsigned int pixelVal = *((unsigned int *)vals);
pixelVec.push_back(pixelVal);
}
}