SDL里面怎么把一张图转成YUV模式

tyyhong 2009-07-09 04:38:09
SDL里面用loadbmp函数装载一张bmp图片或者用扩展函数装载其他格式的图片后,得到的都是RGB模式的在内存中,我现在想把它转换成YUV模式的然后保存这张图

欢迎大家关注本贴,谈论SDL,一起学习 。(分不够下次发帖回复消息给分,呵呵)
...全文
201 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tuzi0203 2009-07-10
  • 打赏
  • 举报
回复
帮顶,好像要算的
fengrx 2009-07-10
  • 打赏
  • 举报
回复

RGBQUAD YUVtoRGB(RGBQUAD lYUVColor)
{
int U,V,R,G,B;
float Y = lYUVColor.rgbRed;
U = lYUVColor.rgbGreen - 128;
V = lYUVColor.rgbBlue - 128;

// R = (int)(1.164 * Y + 2.018 * U);
// G = (int)(1.164 * Y - 0.813 * V - 0.391 * U);
// B = (int)(1.164 * Y + 1.596 * V);
R = (int)( Y + 1.403f * V);
G = (int)( Y - 0.344f * U - 0.714f * V);
B = (int)( Y + 1.770f * U);

R= min(255,max(0,R));
G= min(255,max(0,G));
B= min(255,max(0,B));
RGBQUAD rgb={(BYTE)B,(BYTE)G,(BYTE)R,0};
return rgb;
}
fengrx 2009-07-10
  • 打赏
  • 举报
回复

RGBQUAD RGBtoYUV(RGBQUAD lRGBColor)
{
int Y,U,V,R,G,B;
R = lRGBColor.rgbRed;
G = lRGBColor.rgbGreen;
B = lRGBColor.rgbBlue;

// Y = (int)( 0.257 * R + 0.504 * G + 0.098 * B);
// U = (int)( 0.439 * R - 0.368 * G - 0.071 * B + 128);
// V = (int)(-0.148 * R - 0.291 * G + 0.439 * B + 128);
Y = (int)(0.299f * R + 0.587f * G + 0.114f * B);
U = (int)((B-Y) * 0.565f + 128);
V = (int)((R-Y) * 0.713f + 128);

Y= min(255,max(0,Y));
U= min(255,max(0,U));
V= min(255,max(0,V));
RGBQUAD yuv={(BYTE)V,(BYTE)U,(BYTE)Y,0};
return yuv;
}
Walf_ghoul 2009-07-09
  • 打赏
  • 举报
回复
这个不会。。。
大前置 2009-07-09
  • 打赏
  • 举报
回复
SDL 开源的

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧