windows - 跨进程发送图像的最有效方式

标签 windows delphi image ipc marshalling

目标

将一个进程生成的图像以非常高的速度高效地传递到另一个进程。这两个进程在同一台机器和同一桌面上运行。操作系统可以是WinXP、Vista、Win7。

详细说明

第一个过程仅用于控制与生成图像的设备的通信。这些图像的大小约为 500x300 像素,每秒可更新数百次。第二个过程需要这些图像来处理它们。第一个过程使用第三方 API 将图像从设备绘制到 HDC。这个 HDC 必须由我提供。

注意:两个进程之间已经打开了一个连接。它们通过匿名管道进行通信并共享内存映射文件 View 。

想法

我如何以尽可能少的工作实现这个目标?我的意思是两者都为计算机和我工作(当然 ;))。我正在使用 Delphi,所以也许有一些组件可用于执行此操作?我想我总是可以绘制到任何图像组件的 HDC,将内容保存到内存流,通过内存映射文件复制内容,在另一侧解压缩并在那里绘制到目标 HDC。我还阅读了有关可用于编码图像的 IPicture 接口(interface)。我需要尽快完成,所以开销越少越好。我不希望仅仅通过复制一些图像来对机器造成压力。

你有什么想法?我感谢对此的每一个想法!

最佳答案

使用 Memory Mapped File .

有关 Delphi 引用,请参阅 Memory-mapped Files in DelphiShared Memory in Delphi .

对于更通用的方法,您可以查看使用管道或通过 TCP 发送位图数据。如有必要,这将使您能够更轻松地在节点之间分发图像数据。

关于windows - 跨进程发送图像的最有效方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2536331/

相关文章:

delphi - W1035 : Return value of function 'Take' might be undefined

python - 灰度图像不是 jpeg

c - 我如何在 XP 中使用 c 程序访问磁盘的原始扇区?

python - 在带有 Python 的 Windows 上使用符号链接(symbolic link)模块

Delphi:如何防止单线程应用程序丢失响应?

asp.net-mvc - 在 asp.net MVC 中保存/显示图像

java - 图像翻转不起作用

c++ - 如何在指定位置安装Qt?

windows - 如何在没有拉伸(stretch)图标的情况下显示像 Windows 10 气球提示一样的气球提示

delphi - 将数据集与 TClientdatasets 嵌套在两个以上级别?