如何将640*480的RGB24视频大小转换为320*240?

江南烟雨梦 2014-07-02 11:08:07
Buffer大小是640*480*3,所以目前的想法是隔行采样,比如一共480行,每一行有640个像素,间隔取其中的320个像素,一直循环直到处理完所有的480行。

但最终的结果却不对,如下图:

原始的640*480


转换后的320*240


感觉最终的图像是截取了640*480的下半部分,然后压缩形成了320*240,上半部分丢失了。
...全文
407 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
江南烟雨梦 2014-07-04
  • 打赏
  • 举报
回复

byte *pData640;//假设已分配内存,且有数据
byte *pData320;//假设已分配内存,但无数据
for ( int i = 0; i < 240/*一共480列,只取其中240列*/; ++i )
{
for ( int j = 0; j < 320/*每行640个像素点,取其中320个*/; ++j )
{
int nPos1 = ( i * 320 + j ) * 3; /*当前写入位置连续*/
int nPos2 = ( i * 2 * 640 + j * 2 ) * 3;/*当前读取位置间隔1个像素,即3个字节*/
::memcpy( pData320 + nPos1, pData640 + nPos2 , 3 );
}
}

下面是转换正常的320*240图像
smilestone322 2014-07-04
  • 打赏
  • 举报
回复
行采样一半,列采样一半
江南烟雨梦 2014-07-04
  • 打赏
  • 举报
回复
已经研究出算法,稍后贴上代码。
江南烟雨梦 2014-07-04
  • 打赏
  • 举报
回复
引用 1 楼 rightorwrong 的回复:
觉得没有错啊
在下面的320*240图中,640*480那幅图的上半部分没了。 我发现buffer中的数据是倒序的,也就是buffer里前半部分的数据是图像下面的内容,后半部分是图像上面的部分; 还在研究转换算法...
rightorwrong 2014-07-04
  • 打赏
  • 举报
回复
觉得没有错啊

2,542

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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