这是实现实际目标的一步
,以更新旧版
Windows窗体
应用程序,运行于
.NET Framework 3.5
How initialize Direct2D renderer into GDI context from managed code for older version of .NET Framework
对于本项目的开始。
我正在关注这个
文件:
Direct2D/Programming Guide/How-to/How to Load a Bitmap from a File
具体来说,C++:
HRESULT DemoApp::LoadBitmapFromFile(
ID2D1RenderTarget *pRenderTarget,
IWICImagingFactory *pIWICFactory,
PCWSTR uri,
UINT destinationWidth,
UINT destinationHeight,
ID2D1Bitmap **ppBitmap
)
{
IWICBitmapDecoder *pDecoder = NULL;
IWICBitmapFrameDecode *pSource = NULL;
IWICStream *pStream = NULL;
IWICFormatConverter *pConverter = NULL;
IWICBitmapScaler *pScaler = NULL;
HRESULT hr = pIWICFactory->CreateDecoderFromFilename(
uri,
NULL,
GENERIC_READ,
WICDecodeMetadataCacheOnLoad,
&pDecoder
);
这需要
IWICImagingFactory pIWICFactory
,它是指在中定义的COM接口
WIC公司
我的问题是:
如何从C#中引用IwicMagingFactory COM对象?
Win2D
不是一个选择,阿法克。WPF解决方案也可能没有帮助,因为它是一个32位的应用程序,并且没有多少内存;我不太愿意再添加一项技术。)
夏普DX
所以我试图从SharpDX源代码中提取工厂创建代码。
文件
SharpDX.Direct2D1\WIC\ImagingFactory.cs
using System;
namespace SharpDX.WIC
{
public partial class ImagingFactory
{
/// <summary>
/// Initializes a new instance of the <see cref="ImagingFactory"/> class.
/// </summary>
public ImagingFactory()
{
Utilities.CreateComInstance(WICImagingFactoryClsid, Utilities.CLSCTX.ClsctxInprocServer, Utilities.GetGuidFromType(typeof(ImagingFactory)), this);
}
}
}
WICImagingFactoryClsid
这是在一个
Mapping.xml
文件:
<const from-guid="CLSID_WICImagingFactory" class="SharpDX.WIC.ImagingFactory" type="System.Guid" name="WICImagingFactoryClsid">new System.Guid("$1")</const>
我不明白那是什么
Mapping.XML
正在做。我想手动编码这个COM接口引用。并知道如何根据需要对其他WIC接口进行编码。或者了解如何生成此类接口,而无需构建所有SharpDX。