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