我尝试修改旋转视频后的窗口宽高总是不能实现,不知道在哪里修改。论坛里有个PropPage.ax可以实现视频图像的90度旋转,但是没有源码,而且存在小问题,旋转后的视频,会间隔几秒后出现停顿的问题,而且在graphedit中运行时cpu占用率比较高。
9 个解决方案
#1
希望高手能指点一二,不胜感激
#2
大家都忙啊,自己顶一下
#3
期盼高手出没,雪中送炭
#4
我写过的代码。。
bool rgb24_rotate_90(unsigned char *src_rgb,unsigned int iWidth,unsigned int iHeight,bool direction)
{
if(!src_rgb)
return false;
unsigned int n=0;
unsigned int linesize=iWidth*3;
unsigned char *dst_rgb = (unsigned char*)malloc(iWidth*iHeight*3);
int i,j;
if(direction)
{
for(j=iWidth;j>0;j--)
for(i=0;i<iHeight;i++)
{
memcpy(&dst_rgb[n],&src_rgb[linesize*i+j*3-3],3);
n+=3;
}
}
else
{
for(j=0;j<iWidth;j++)
for(i=iHeight;i>0;i--)
{
memcpy(&dst_rgb[n],&src_rgb[linesize*(i-1)+j*3-3],3);
n+=3;
}
}
memcpy(src_rgb ,dst_rgb ,iWidth*iHeight*3); // itmp = iLBytes*iHeight;
free(dst_rgb);
return true;
}
bool rgb24_rotate_90(unsigned char *src_rgb,unsigned int iWidth,unsigned int iHeight,bool direction)
{
if(!src_rgb)
return false;
unsigned int n=0;
unsigned int linesize=iWidth*3;
unsigned char *dst_rgb = (unsigned char*)malloc(iWidth*iHeight*3);
int i,j;
if(direction)
{
for(j=iWidth;j>0;j--)
for(i=0;i<iHeight;i++)
{
memcpy(&dst_rgb[n],&src_rgb[linesize*i+j*3-3],3);
n+=3;
}
}
else
{
for(j=0;j<iWidth;j++)
for(i=iHeight;i>0;i--)
{
memcpy(&dst_rgb[n],&src_rgb[linesize*(i-1)+j*3-3],3);
n+=3;
}
}
memcpy(src_rgb ,dst_rgb ,iWidth*iHeight*3); // itmp = iLBytes*iHeight;
free(dst_rgb);
return true;
}
#5
感谢Evankaka!
这个函数是在Transform中调用吗?这个函数实现了图像的旋转,要使视频图像正确显示在窗口上,是不是还需要做其他方面的处理和修改,例如宽高比转换。我调整宽高尺寸的代码总是不起作用,也不知何故。测试了下,如果窗口尺寸不正确,即使在Transform中代码是正确的,最后显示的图像也是失真的,例如条纹重影。
感觉DirectDraw的运行机制有些复杂,新手掌握起来难度比较大。
这个函数是在Transform中调用吗?这个函数实现了图像的旋转,要使视频图像正确显示在窗口上,是不是还需要做其他方面的处理和修改,例如宽高比转换。我调整宽高尺寸的代码总是不起作用,也不知何故。测试了下,如果窗口尺寸不正确,即使在Transform中代码是正确的,最后显示的图像也是失真的,例如条纹重影。
感觉DirectDraw的运行机制有些复杂,新手掌握起来难度比较大。
#6
不知道里面的奥秘究竟在哪里
#7
努力研读测试了几天没有改善啊
#8
楼主万福,不知道这个视频旋转的功能做好了吗?好了的话能指教一下吗。我也看了好多天的文档还有这个传说中的EZRGB24demo,但是还是不知道怎么下手,新手太菜。万望指教呀
#9
不知道楼主解决了吗?怎么解决的
#1
希望高手能指点一二,不胜感激
#2
大家都忙啊,自己顶一下
#3
期盼高手出没,雪中送炭
#4
我写过的代码。。
bool rgb24_rotate_90(unsigned char *src_rgb,unsigned int iWidth,unsigned int iHeight,bool direction)
{
if(!src_rgb)
return false;
unsigned int n=0;
unsigned int linesize=iWidth*3;
unsigned char *dst_rgb = (unsigned char*)malloc(iWidth*iHeight*3);
int i,j;
if(direction)
{
for(j=iWidth;j>0;j--)
for(i=0;i<iHeight;i++)
{
memcpy(&dst_rgb[n],&src_rgb[linesize*i+j*3-3],3);
n+=3;
}
}
else
{
for(j=0;j<iWidth;j++)
for(i=iHeight;i>0;i--)
{
memcpy(&dst_rgb[n],&src_rgb[linesize*(i-1)+j*3-3],3);
n+=3;
}
}
memcpy(src_rgb ,dst_rgb ,iWidth*iHeight*3); // itmp = iLBytes*iHeight;
free(dst_rgb);
return true;
}
bool rgb24_rotate_90(unsigned char *src_rgb,unsigned int iWidth,unsigned int iHeight,bool direction)
{
if(!src_rgb)
return false;
unsigned int n=0;
unsigned int linesize=iWidth*3;
unsigned char *dst_rgb = (unsigned char*)malloc(iWidth*iHeight*3);
int i,j;
if(direction)
{
for(j=iWidth;j>0;j--)
for(i=0;i<iHeight;i++)
{
memcpy(&dst_rgb[n],&src_rgb[linesize*i+j*3-3],3);
n+=3;
}
}
else
{
for(j=0;j<iWidth;j++)
for(i=iHeight;i>0;i--)
{
memcpy(&dst_rgb[n],&src_rgb[linesize*(i-1)+j*3-3],3);
n+=3;
}
}
memcpy(src_rgb ,dst_rgb ,iWidth*iHeight*3); // itmp = iLBytes*iHeight;
free(dst_rgb);
return true;
}
#5
感谢Evankaka!
这个函数是在Transform中调用吗?这个函数实现了图像的旋转,要使视频图像正确显示在窗口上,是不是还需要做其他方面的处理和修改,例如宽高比转换。我调整宽高尺寸的代码总是不起作用,也不知何故。测试了下,如果窗口尺寸不正确,即使在Transform中代码是正确的,最后显示的图像也是失真的,例如条纹重影。
感觉DirectDraw的运行机制有些复杂,新手掌握起来难度比较大。
这个函数是在Transform中调用吗?这个函数实现了图像的旋转,要使视频图像正确显示在窗口上,是不是还需要做其他方面的处理和修改,例如宽高比转换。我调整宽高尺寸的代码总是不起作用,也不知何故。测试了下,如果窗口尺寸不正确,即使在Transform中代码是正确的,最后显示的图像也是失真的,例如条纹重影。
感觉DirectDraw的运行机制有些复杂,新手掌握起来难度比较大。
#6
不知道里面的奥秘究竟在哪里
#7
努力研读测试了几天没有改善啊
#8
楼主万福,不知道这个视频旋转的功能做好了吗?好了的话能指教一下吗。我也看了好多天的文档还有这个传说中的EZRGB24demo,但是还是不知道怎么下手,新手太菜。万望指教呀
#9
不知道楼主解决了吗?怎么解决的