gpt4 book ai didi

c++ - Directdraw:旋转视频流

转载 作者:太空宇宙 更新时间:2023-11-04 02:19:46 26 4
gpt4 key购买 nike

问题

Windows Mobile / Directdraw: Rotate video stream

视频预览正常,我现在需要的是旋转图像的方法。我认为处理此问题的唯一方法是编写一个基于 CTransformFilter 的自定义过滤器,它将为您旋转相机图像。如果你能帮我解决这个问题,例如凭借我有限的 DirectDraw 知识帮助我开发此过滤器,您将收获丰厚的返回。

背景/上一个问题

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

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

缺点是我从未真正使用过任何 native Windows API,而且我的 C++ 相当糟糕。除此之外,我在某处读到 HTC 手机的 Direct Draw 支持特别糟糕,您将不得不使用未记录的 native HTC 库调用来拍摄高质量的照片。

好消息是,一家公司愿意让我们开发一种符合上述规范的控件。他们估计大约需要 10 天,这引发了我们是否可以在合理的时间内自行开发此控件的讨论。

现在我的工作是研究哪种替代方案更好。不用说,研究整个的时间太少了architecture并开发一个演示,这让我想到了以下问题:

问题不再相关!

  • 你们中有人有过类似项目的经验吗?您有什么建议?
  • 是否有处理视频预览和图像捕获的良好 Direct Draw 源代码示例?

最佳答案

好吧,如果您查看 EZRGB24 示例,您就会了解简单视频变换过滤器的基础知识。

您需要对样本做两件事才能让它做您想做的事。

1) 你需要将x,y复制到y,x。
2) 你需要告诉媒体样本,样本现在是高 x 宽,而不是宽 x 高。

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

解决1比较简单。您可以通过执行“x + (y * Width)”来计算像素的位置。因此,您逐步遍历每个 x 和 y,以这种方式计算位置,然后将其写入“y + (x * Height)”。这将转置图像。当然,如果没有第 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++ - Directdraw:旋转视频流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2289637/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com