我有一个从另一个进程获得的位图句柄。不幸的是,我无法在此过程中更改代码,因为它是第三方 SDK(Abbyy Finereader SDK)。
我创建了一个 FRDocument 并尝试使用 GetPicture 从 Abbyy Image 对象获取位图句柄,如下所示:
FRDocument doc = engine.CreateFRDocumentFromImage(PATH_TO_SAMPLE_BITMAP);
FRPage page = doc.Pages[0];
FREngine.Image colorImage = page.ImageDocument.ColorImage;
long hbitmap = colorImage.GetPicture(null, 0);
IntPtr bitmapPtr = new IntPtr(hbitmap);
Bitmap bmp = Bitmap.FromHbitmap(bitmapPtr);
现在我想获得一个位图,Bitmap.FromHbitmap(hBitmap);
但位图类抛出异常,并显示消息“GDI+ 中发生一般错误”。没有提供 InnerException。手柄似乎是正确的。
在 SDK 描述中描述了它应该与编组一起使用,但没有提供更多信息或代码示例。我用谷歌搜索了很多,但我不是编组专家,这个话题似乎真的很复杂。
有谁知道如何从另一个进程中创建的句柄中获取位图?我希望我的问题是可以理解的。
更新:
我做了一些研究,在 Abbyy SDK 描述中发现 GetPicture() 提供的位图是使用 CreateDIBSection 创建的,并在客户端所有权下传递。但我不知道如何获取在 C# 中使用此(本机)方法创建的位图。