A_217 2022-04-11 17:14
浏览 54
已结题

RGB三通道数据转换bmp时图像错位

问题遇到的现象和发生背景

将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];
        }
    }
}

原始图片如下

img

img

img

效果图如下:

img

问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 4月19日
    • 创建了问题 4月11日

    悬赏问题

    • ¥15 使用MATLAB进行余弦相似度计算加速
    • ¥15 服务器安装php5.6版本
    • ¥15 我想用51单片机和数码管做一个从0开始的计数表 我写了一串代码 但是放到单片机里面数码管只闪烁一下然后熄灭
    • ¥20 系统工程中,状态空间模型中状态方程的应用。请猛男来完整讲一下下面所有问题
    • ¥15 我想在WPF的Model Code中获取ViewModel Code中的一个参数
    • ¥15 arcgis处理土地利用道路 建筑 林地分类
    • ¥20 使用visual studio 工具用C++语音,调用openslsx库读取excel文件的sheet问题
    • ¥100 寻会做云闪付tn转h5支付链接的技术
    • ¥15 DockerSwarm跨节点无法访问问题
    • ¥15 使用dify通过OpenAI 的API keys添加OpenAI模型时报了“Connection Error”错误