我有这个需求:我想复制视频图像的选定部分(它们是来自飞行模拟器的仪表或其他仪器)并将它们复制到小型LCD显示器上。每个液晶显示器必须物理复制一台仪器,从而从源图像中选择一个区域。 我打算使用python,但也可能使用其他语言。但是我对图形没有任何经验,我不知道如何从视频板内存中读取原始图像。很多年前,使用EGA和VGA卡时,即使我从未有过这种需求,也很容易。现在我读到了Windows锁定了任何直接访问视频内存的尝试。这是真的吗?如果是的话,该怎么做? 我打算使用集成视频板。 感谢您的关注视频内存拷贝
视频内存拷贝
回答
根据您的整体解决方案,您可能更容易将整个视频发送到每个小屏幕,并简单地缩放/裁剪回放以仅显示所需的部分。
这在带宽方面效率较低(可能 - 取决于如何压缩您提取的任何视频),但避免了必须执行任何处理器和电池耗尽的复杂视频操作。
如果你的系统是基于Android可以使用TextureView的setTransform做到这一点:https://developer.android.com/reference/android/view/TextureView.html#setTransform(android.graphics.Matrix)
在HTML5中,你可以使用CSS和视频实现了类似的事情变换:https://www.w3schools.com/cssref/css3_pr_transform.asp
感谢您的回答。目标系统将是一个简单的液晶显示器加上一个Arduino或树莓板,没有电池问题。带宽可能是一个问题。但我会考虑你的建议,再次感谢。 – Salrandazzo
遵循您的建议,我可以将整个模拟图像(视频)流式传输,并且每个远程设备都可以抓住它的一部分,与仪器显示相关的部分。我可以在发送端使用python + OpenCV。并且仍然不知道接收端是什么,取决于设备(Arduino或Raspberry)。 – Salrandazzo
- 1. cudaMemcpy2D共享内存拷贝
- 2. 内存对齐和长拷贝
- 3. CodeMirror拷贝保存样式
- 4. 默认固定内存与零拷贝内存
- 5. 硬拷贝vs浅拷贝javascript
- 6. 浅拷贝和深拷贝在C
- 7. C++类拷贝(指针拷贝)
- 8. 浅拷贝和深拷贝示例
- 9. FFmpeg的-c拷贝中删除视频,几秒钟
- 10. 使用硬拷贝分发的视频的DRM
- 11. 拷贝目录
- 12. Javascript浅拷贝
- 13. 浅拷贝
- 14. 拷贝数据
- 15. 列拷贝和
- 16. 深拷贝
- 17. 为什么懒的拷贝时我们有深拷贝和浅拷贝?
- 18. Java ArrayList的拷贝构造函数是浅拷贝还是深拷贝?
- 19. 拷贝内容与特定标准
- 20. QImage拷贝写入
- 21. iPhone拷贝文件
- 22. 深拷贝(链表)
- 23. 拷贝文件到
- 24. 拷贝目录VC++
- 25. 结构深拷贝
- 26. JDO拷贝对象
- 27. 深拷贝ASP.NET GridView
- 28. DPDK mbuf深拷贝
- 29. 将非托管内存拷贝到托管字节数组
- 30. 从c传递片段给golang做内存拷贝?
你提到的Windows ...你可以使用winapi直接在内存中以位图的形式呈现屏幕内容。在OpenGL中,存在旧的'glReadPixels'或者使用'FBO'或者渲染位图,但是这涉及到篡改渲染代码,如果你可以或不可以做到则渲染代码不清楚。您没有指定视频源(图像/视频文件,来自某些第三方App,IPC,LAN的真实视频源?)您没有指定平台(gfx访问与平台紧密相关) – Spektre
您是对的。来源是一个飞行模拟器,这样图像就像一个视频。操作系统取决于用户,我将从我自己的应用程序开始,即Win10。目的是将选定的飞行模拟部分(即乐器)转移到许多不同的设备上,每一个设备都由一个小触摸屏和一个像Arduino或Raspberry这样的电路板组成。该板将在LCD上显示所选仪器的部分(想象一下指南针或雷达),触摸部分将用于向仪器发送仪器相关命令。 – Salrandazzo
因此,我认为你不能篡改应用程序代码...使用winapi ...获取应用程序的句柄(或整个桌面),并在一段时间内将画布内容复制到应用程序中...对于乐器,不需要这样做与太大的FPS ...看到[获取运行OpenGL的子窗口的截图(Windows)](https://stackoverflow.com/a/18107834/2521214) – Spektre