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

|| 我们正在创建一个Web应用程序,它将在浏览器界面中将轮廓区域显示为位图。 我们已经有了一个扩展的Delphi库,它可以生成轮廓并将其绘制到TCanvas上。我们希望能够尽可能地重复使用该代码。 因此,我们在Delphi中创建了一个COM对象,并使用该对象生成轮廓。我在ASP.Net项目中添加了对该COM对象的引用,因此可以从.Net代码访问它。到目前为止,这似乎很好。 我现在遇到的问题是,将生成的TBitmap尽快地移到ASP.Net方面。 我可以想到一些情况,但每种情况都遇到问题: 将位图保存为流(作为PNG),并返回一个“ 0”接口。问题是COM对象向导似乎不接受“ 0”作为函数的返回值。另外,我不知道.Net是否会处理该问题,但我希望Interop包装程序能够解决这个问题。 将位图保存为流(作为PNG),并返回一个字节数组。那我应该使用哪种返回类型?我猜是
SAFEARRAY(byte)
(向导至少接受了这个意思),但是a)如何在Delphi端创建SAFEARRAY,b)如何在.Net中阅读? 以某种方式将
TBitmap
转换为
IPicture
接口,并将其返回。至少,COM对象向导似乎支持IPicture。在这里,我真的不知道如何将TBitmap转换为IPicture(将其保存到流中并从该流中创建IPicture除外),这似乎有点愚蠢,因为.Net代码将不得不将其流式传输到浏览器中)。同样,我不知道.Net将如何处理
IPicture
,尽管我希望它将将其映射到常规
Image
对象,然后可以通过
Response
对象将其写入。 所以我的问题是:就性能而言,什么是最好的前进方法,以及如何解决所指出的问题?     
已邀请:
我会在原生世界和托管世界之间传递HBITMAP。 通过调用
ReleaseHandle
从Delphi
TBitmap
上拆下手柄。 通过调用
Image.FromHbitmap()
创建.net
Bitmap
。     
您可以编写一个Delphi COM对象,该对象拥有位图并可以返回位图句柄。您可以从TBitmap获取此句柄并将其转换为OLE_HANDLE。只要持有对COM对象的引用,位图就有效。     

要回复问题请先登录注册