其他分享
首页 > 其他分享> > c-Directdraw:旋转视频流

c-Directdraw:旋转视频流

作者:互联网

问题

Windows Mobile / Directdraw: Rotate video stream

视频预览正在运行,我现在需要的只是一种旋转图像的方法.我认为处理此问题的唯一方法是编写基于CTransformFilter的自定义滤镜,它将为您旋转相机图像.如果您可以帮助我解决此问题,例如通过利用我有限的DirectDraw知识帮助我开发此过滤器,赏金属于您.

背景/上一个问题

我目前正在为移动设备(HTC HD2,Windows Mobile 6)开发应用程序.程序需要做的一件事是使用内置相机拍照.以前,我是使用Windows Mobile 6 SDK提供的CameraCaptureDialog进行此操作的,但是我们的客户希望使用一种更加用户友好的解决方案.

该想法是在单击控件时在控件中预览相机的视频流,并使用相机的照片功能拍摄高分辨率图片(> = 2兆像素).我们对该主题进行了一些研究,发现实现此目标的最佳方法似乎是使用Direct Draw.

缺点是我从未真正使用过任何本机Windows API,而且我的C语言还很糟糕.除此之外,我在某处读到HTC手机的Direct Draw支持特殊性很差,您将不得不使用未记录的本地HTC库调用来拍摄高质量的图片.

好消息是,某公司向我们提供了开发符合上述规格的控件的机会.他们估计大约需要10天,如果可以在合理的时间内自行开发此控件,则会引发讨论.

现在,我的工作是研究哪种替代方法更好.不用说,学习整个architecture并开发演示的时间就少得多,这使我想到了以下问题:

问题不再相关!

>你们中有没有从事过类似项目的经验?您有什么建议?
>是否有一个很好的Direct Draw源代码示例可以处理视频预览和图像捕获?

解决方法:

好吧,如果您查看EZRGB24示例,您将获得一个简单的视频转换滤波器的基础.

您需要对样本执行2件事才能使其执行您想要的操作.

1)您需要将x,y复制到y,x.
2)您需要告诉媒体样本,样本现在是“高度x宽度”,而不是“宽度x高度”.

请记住,最终图像的像素数将完全相同.

解决1比较简单.您可以通过执行“ x(y *宽度)”来计算像素的位置.因此,您将逐步遍历每个x和y,以这种方式计算位置,然后将其写入“ y(x *高度)”.这将转置图像.当然,如果没有步骤2,这将看起来完全错误.

要解决2,您需要获取输入样本的AM_MEDIA_TYPE.然后,您需要找出formatType是什么(可能是FormatType_VideoInfo或FormatType_VideoInfo2).因此,您可以将AM_MEDIA_TYPE的pbFormat成员强制转换为VIDEOINFOHEADER或VIDEOINFOHEADER2(取决于FormatType).现在,您需要将VIDEOINFOHEADER [2] :: bmiHeader.biWidth和biHeight分别设置为输入媒体样本的biHeight和biWidth.其他所有内容都应与输入AM_MEDIA_TYPE相同.

我希望能有所帮助.

标签:c-3,c,camera,windows-mobile,directdraw
来源: https://codeday.me/bug/20191013/1907484.html