.net - 通过 COM 对象将 Delphi 生成的位图返回到 (ASP).Net

标签 .net delphi com bitmap com-interop

我们正在创建一个 Web 应用程序,它将在浏览器界面中将轮廓区域显示为位图。

我们已经拥有一个丰富的 Delphi 库,可以生成轮廓,并将它们绘制到 TCanvas 上。我们希望能够尽可能地重复使用该代码。

因此,我们在 Delphi 中创建了一个 COM 对象,并使用它来生成轮廓。我已在 ASP.Net 项目中添加了对该 COM 对象的引用,因此我可以从 .Net 代码访问它。到目前为止,这似乎效果很好。

我现在遇到的问题是尽快将生成的 TBitmap 发送到 ASP.Net 端。

我可以想到一些场景,但我在每个场景上都遇到了问题:

  1. 将位图保存到流(作为 PNG),并返回 IStream 接口(interface)。问题是 COM 对象向导似乎不接受 IStream 作为函数的返回值。另外,我不知道 .Net 是否知道如何处理它,但我希望 Interop 包装器能够解决这个问题。

  2. 将位图保存到流(作为 PNG),并返回字节数组。那我应该使用什么返回类型呢?我猜测 SAFEARRAY(byte) (向导至少接受这一点),但是 a) 如何在 Delphi 端创建 SAFEARRAY,以及 b) 如何读取该内容 在 .Net 中?

  3. 以某种方式TBitmap转换为IPicture接口(interface),然后返回。至少,IPicture 似乎受到 COM 对象向导的支持。在这里,我真的不知道如何将 TBitmap 转换为 IPicture(除了将其保存到流中,并从该流创建 IPicture,这似乎有点愚蠢,因为 .Net 代码无论如何都必须将其流式传输到浏览器) )。同样,我不知道 .Net 将如何处理 IPicture,尽管我希望它将它映射到常规 Image 对象,然后可以通过 响应对象。

所以我的问题是:就性能而言,前进的最佳方式是什么,以及如何解决所指出的问题?

最佳答案

我会在 native 世界和托管世界之间传递 HBITMAP。

关于.net - 通过 COM 对象将 Delphi 生成的位图返回到 (ASP).Net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5662011/

相关文章:

c# - .net core 3,MVC,使用端点路由时不支持使用 'UseMvcWithDefaultRoute' 配置 MVC

c# - 为什么 System.IO.Path.Combine 有 4 个重载?

ios - 如何创建一个 UIBackgroundTask 以在应用程序处于后台时发送数据?

database - Delphi DataModule 用法 - 单个还是多个?

c++ - 无法在 Win7 上设置 COM 构造函数字符串 - CryptProtectData 更改?

c# - 远程 COM 服务器实例化

c# - 缺少 VS2017 中的一些 Web 开发实用程序

c# - 异步测试在 Nunit 2.6.2 中挂起

delphi - 创建指向类的新指针

作为脚本运行和通过交互式 shell 运行之间的 Python 区别