capFileSaveDIB是保存在硬盘上的,请问如何保存在内存中呢?
求代码,直接从lpHDr->lpData中的YUV2数据进行保存。
求代码,直接从lpHDr->lpData中的YUV2数据进行保存。
解决方案 »
- 各位大哥大姐、远程连接数据库连了好几天都没连上、跪求解决办法
- 一个简单的console程序。。,帮帮忙
- 如何实现两个OCX控件的通讯
- 动态曲线的显示问题??????
- Singleton模式引发的link error!!!
- 请问如何使对话框的关闭按钮变灰,不可用,绝对给分
- 请问键盘上的print screen的功能是怎么实现的?
- VC++ 使用Microsoft Web Browser 控件 多线程使用stop()方法 程序卡死
- 哪位兄弟知道有什么好的图像格式转换、显示的控件或者是类么?
- 请教高手如何设置DOS程序的环境路径
- 如果根据View获取该CFrameWnd指针?
- 关于自启动服务程序的托盘图标问题
void YUY2_RGB( BYTE *YUY2buff, BYTE *RGBbuff, DWORD dwYUVSize )
{
//Algorithm:
//R = 1.164(Y - 16) + 2.018(U - 128)
//G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
//B = 1.164(Y - 16) + 1.596(V - 128) //R = Y + 1.403V
//G = Y - 0.344U' - 0.714V
//B = Y + 1.770U
int R, G, B;
float Y, U, Y1, V;
BYTE *poriYUV2buff = YUY2buff;
BYTE *poriRGBbuff = RGBbuff;
for ( DWORD i = 0; i < dwYUVSize; i += 4 )
{
//1. 获取Y U V 数值,
//YUV2格式的排列是Y0,V0,Y1,U0, Y2,V2,Y3,U2
Y = *YUY2buff;
U = *(++YUY2buff);
Y1 = *(++YUY2buff);
V = *(++YUY2buff);
++YUY2buff; //2. 计算 R G B 值
R = 1.164f * ( Y - 16 ) + 2.018f * ( U - 128 );
G = 1.164f * ( Y - 16 ) - 0.813f * ( V - 128 ) - 0.391f * ( U - 128 );
B = 1.164f * ( Y - 16 ) + 1.596f * ( V - 128 ); //3. 溢出处理
if ( R > 255 ) R = 255; if ( R < 0 ) R = 0;
if ( G > 255 ) R = 255; if ( G < 0 ) R = 0;
if ( B > 255 ) R = 255; if ( B < 0 ) R = 0; //4. 输出 R G B
//一个YUV2包含两个像素, 所以需要两个RGB像素表示
*(RGBbuff) = (byte)R;
*(++RGBbuff) = (byte)G;
*(++RGBbuff) = (byte)B; *(++RGBbuff) = (byte)R;
*(++RGBbuff) = (byte)G;
*(++RGBbuff) = (byte)B; ++RGBbuff;
} YUY2buff = poriYUV2buff;
RGBbuff = poriRGBbuff;
}