c++ - 如何在 C++ 中将 yuy2 转换为 BITMAP

标签 c++ bitmap camera directshow

我正在使用安全摄像头 DLL 从摄像头中检索图像。 DLL 调用我的程序的一个函数,将图像缓冲区作为参数传递,但图像是 yuy2 格式。我需要将此缓冲区转换为 RGB,但我尝试了在 Internet 上找到的所有公式,但都没有成功。我试过的每个例子(包括 http://msdn.microsoft.com/en-us/library/aa904813(VS.80).aspx#yuvformats_2 )都给我错误的颜色。

我可以仅使用像素的 Y 分量将缓冲区转换为黑白图像,但我确实需要彩色图片。我调试(仅汇编)在屏幕上显示图像的 DLL,它使用 DirectDraw 来执行此操作。

最佳答案

使用来自 Microsoft link 的信息在问题中:

for (int i = 0;  i < width/2;  ++i)
{
    int y0 = ptrIn[0];
    int u0 = ptrIn[1];
    int y1 = ptrIn[2];
    int v0 = ptrIn[3];
    ptrIn += 4;
    int c = y0 - 16;
    int d = u0 - 128;
    int e = v0 - 128;
    ptrOut[0] = clip(( 298 * c + 516 * d + 128) >> 8); // blue
    ptrOut[1] = clip(( 298 * c - 100 * d - 208 * e + 128) >> 8); // green
    ptrOut[2] = clip(( 298 * c + 409 * e + 128) >> 8); // red
    c = y1 - 16;
    ptrOut[3] = clip(( 298 * c + 516 * d + 128) >> 8); // blue
    ptrOut[4] = clip(( 298 * c - 100 * d - 208 * e + 128) >> 8); // green
    ptrOut[5] = clip(( 298 * c + 409 * e + 128) >> 8); // red
    ptrOut += 6;
}

关于c++ - 如何在 C++ 中将 yuy2 转换为 BITMAP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4491649/

相关文章:

c++ - 在初始化列表中初始化许多对象成员变量

c++ - 是否需要从纯抽象类(接口(interface))进行虚拟继承

android - 将位图放入包中

android - 如何在两个 Activity 之间传递位图数组

ios - 从 CGImageRef 获取像素数据包含额外的字节?

opencv - 计算热像仪的本征函数?

java - 奇怪的分配和字符串连接优化代码的一些描述

c++ - 如何安装我刚刚作为 gcc 的一部分构建的 libstdc++?

java - 我想在同一个 Activity 中停止后重新启动相机源

Android Moto Droid 相机每次在拍照时都会挂起