问题
Windows Mobile / Directdraw:旋转视频流
视频预览是有效的,我现在需要的是一种方式旋转图像。我认为处理这个问题的唯一方法是编写一个基于CTransformFilter的自定义过滤器,它将为您旋转相机图像。如果你能帮助我解决这个问题,例如,通过帮助我用我有限的DirectDraw知识来开发这个过滤器,那么它就是你的。
背景/上一个问题
我目前正在为移动设备(HTC HD2,Windows 6)开发一个应用程序。该程序需要做的一件事是使用内置摄像头拍摄照片。以前,我是用WindowsMobile6SDK提供的CameraCaptureDialog来做这件事的,但是我们的客户想要一个更方便用户的解决方案。
其想法是在控件中预览摄像机的视频流,并在单击控件时使用相机的照片功能拍摄一张高分辨率图片(>= 200万像素)。我们对这一主题做了一些研究,发现实现这一目标的最佳方法似乎是使用直接绘图。
缺点是我从未真正使用过任何本机windows,而且我的C++相当糟糕。除此之外,我还在某个地方读到,HTC手机的直接吸引支持是非常糟糕的,你将不得不使用未记录的本地HTC库调用来拍摄高质量的照片。
好消息是,一家公司提供给我们开发一个符合上述规格的控制。他们估计他们大约需要10天的时间,如果我们能在合理的时间内发展我们自己的控制,就会引起讨论。
现在我的工作是研究哪种选择更好。不用说,研究整个建筑并开发一个演示程序的时间太短了,这就引出了以下问题:
问题不再相关了!
发布于 2010-03-01 19:00:50
如果您查看EZRGB24示例,您将得到一个简单的视频转换过滤器的基础知识。
有两件事,你需要做的样本,以使它做你想做的。
1)你需要复制x,y到y,x。
2)您需要告诉媒体示例,该示例现在是高度x宽度,而不是宽度x高度。
请记住,最终图像将有完全相同的像素数。
解决1是相对简单的。您可以通过执行"x + (y *宽度)“来计算像素的位置。因此,您遍历每一个x和y,以这样的方式计算位置,然后将其写到"y + (x *高度)“。这将转换图像。当然,如果没有step2,这看起来是完全错误的。
要解决2,需要获取输入示例的AM_MEDIA_TYPE。然后,您需要了解formatType是什么(可能是FormatType_VideoInfo或FormatType_VideoInfo2)。因此,您可以将AM_MEDIA_TYPE的AM_MEDIA_TYPE成员转换为VIDEOINFOHEADER或VIDEOINFOHEADER2 (取决于FormatType)。现在需要将VIDEOINFOHEADER2::bmiHeader.biWidth和biHeight设置为输入媒体示例的biHeight和biWidth (分别)。其他一切都应该与输入AM_MEDIA_TYPE相同。
我希望这能帮点忙。
发布于 2010-02-19 12:16:26
https://stackoverflow.com/questions/2289637
复制相似问题