问题遇到的现象和发生背景
将red、green、blue三个通道的数据转换bmp时,生成的图像错位了,代码段如下:
else if (3 == channels) {
LPBYTE red_data_buf = nullptr;
LPBYTE green_data_buf = nullptr;
LPBYTE blue_data_buf = nullptr;
// 获取RGB图像的三个通道的数据
image.GetImagePointer3((LPVOID*)&red_data_buf, (LPVOID*)&green_data_buf, (LPVOID*)&blue_data_buf, &type, &width, &height);
// 计算每行字节数
pitch *= ((width * channels * 8 + 31) & ~31) / 8;
len = abs(pitch) * height;
image_data_buf = new BYTE[len];
memset(image_data_buf, 0, len);
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
image_data_buf[i * abs(pitch) + 3 * j + 0] = blue_data_buf[i * width + j];
image_data_buf[i * abs(pitch) + 3 * j + 1] = green_data_buf[i * width + j];
image_data_buf[i * abs(pitch) + 3 * j + 2] = red_data_buf[i * width + j];
}
}
}
原始图片如下
效果图如下: