首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Directdraw:旋转视频流

Directdraw:旋转视频流
EN

Stack Overflow用户
提问于 2010-02-18 15:17:01
回答 2查看 1.8K关注 0票数 1

问题

Windows Mobile / Directdraw:旋转视频流

视频预览是有效的,我现在需要的是一种方式旋转图像。我认为处理这个问题的唯一方法是编写一个基于CTransformFilter的自定义过滤器,它将为您旋转相机图像。如果你能帮助我解决这个问题,例如,通过帮助我用我有限的DirectDraw知识来开发这个过滤器,那么它就是你的。

背景/上一个问题

我目前正在为移动设备(HTC HD2,Windows 6)开发一个应用程序。该程序需要做的一件事是使用内置摄像头拍摄照片。以前,我是用WindowsMobile6SDK提供的CameraCaptureDialog来做这件事的,但是我们的客户想要一个更方便用户的解决方案。

其想法是在控件中预览摄像机的视频流,并在单击控件时使用相机的照片功能拍摄一张高分辨率图片(>= 200万像素)。我们对这一主题做了一些研究,发现实现这一目标的最佳方法似乎是使用直接绘图。

缺点是我从未真正使用过任何本机windows,而且我的C++相当糟糕。除此之外,我还在某个地方读到,HTC手机的直接吸引支持是非常糟糕的,你将不得不使用未记录的本地HTC库调用来拍摄高质量的照片。

好消息是,一家公司提供给我们开发一个符合上述规格的控制。他们估计他们大约需要10天的时间,如果我们能在合理的时间内发展我们自己的控制,就会引起讨论。

现在我的工作是研究哪种选择更好。不用说,研究整个建筑并开发一个演示程序的时间太短了,这就引出了以下问题:

问题不再相关了!

  • 你们中有谁有类似项目的经验吗?你的建议是什么?
  • 是否有一个处理视频预览和图像捕获的好的直接绘制源代码示例?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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相同。

我希望这能帮点忙。

票数 2
EN

Stack Overflow用户

发布于 2010-02-19 12:16:26

这个问题将帮助您获得有关DirectDraw的一些细节。不久前,我对此做了一些研究,我能找到的最好的就是这个博客帖子 (在上面的问题中也提到过)。文章展示了CameraCapture示例在SDK中的一个扩展。

然而,不要有很高的期望。看来预览和拍摄的图片只能在小分辨率下工作。虽然DirectDraw使用描述来配置解析,但不能保证驱动程序能够正确地实现这一点。

因此,根据我的经验,你所读到的是真的。唯一的方法是使用HTC驱动程序。所以,如果你不想为了一个可疑的结果而没完没了地进行逆向工程,让其他人为你做这件事。如果你想试一试,试试xda-开发者论坛

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2289637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档