【发布时间】:2011-08-05 10:37:44
【问题描述】:
我们正在创建一个 Web 应用程序,它将在浏览器界面中将轮廓区域显示为位图。
我们已经有一个扩展的 Delphi 库,可以生成轮廓,并将它们绘制到 TCanvas 上。我们希望能够尽可能地重复使用该代码。
所以我们在 Delphi 中创建了一个 COM 对象,并使用它来生成轮廓。我在我的 ASP.Net 项目中添加了对该 COM 对象的引用,因此我可以从 .Net 代码中访问它。到目前为止,这似乎效果很好。
我现在遇到的问题是将生成的 TBitmap 尽快送到 ASP.Net 端。
我能想到一些场景,但我都遇到了问题:
将位图保存为流式传输(以 PNG 格式),并返回
IStream接口。问题是 COM 对象向导似乎不接受IStream作为函数的返回值。另外,我不知道 .Net 是否会知道如何处理它,但我希望 Interop 包装器能够解决这个问题。将位图保存为流式传输(以 PNG 格式),并返回一个字节数组。那我应该使用什么返回类型?我猜
SAFEARRAY(byte)(至少向导接受了这一点),但是a)我如何在Delphi 端创建一个SAFEARRAY,以及b)我如何在.Net 中阅读那个?-
不知何故将
李>TBitmap转换为IPicture接口,然后返回。至少,IPicture 似乎受到 COM 对象向导的支持。在这里,我真的不知道如何将 TBitmap 转换为 IPicture(除了将其保存到流中,并从该流中创建 IPicture,这似乎有点愚蠢,因为 .Net 代码无论如何都必须将其流式传输到浏览器)。同样,我不知道.Net 将如何处理IPicture,尽管我希望它将它映射到一个常规的Image对象,然后可以通过Response对象写出。
所以我的问题是:就性能而言,最好的前进方式是什么?如何解决所指出的问题?
【问题讨论】:
标签: .net delphi com bitmap com-interop