3

我有一个使用 WIC 为 .NET 应用程序创建的缩略图生成例程。过去一年它一直运行良好,但我们刚刚迁移到新服务器。

旧服务器是 W2k8 R2 Enterprise SP1 新服务器是 W2k8 Standard SP1

这是失败的代码

    Public Sub New(ByVal PictureData As Byte())
        Me.WICFactory = New WICImagingFactory()

        Dim InputStream As IWICStream = WICFactory.CreateStream()
        InputStream.InitializeFromMemory(PictureData, PictureData.Length)

        InputDecoder = WICFactory.CreateDecoderFromStream(InputStream, Nothing, WICDecodeOptions.WICDecodeMetadataCacheOnDemand)

        '^===== This line throws the HRESULT 0x88982F50

我查过了,图片数据是有效数据。如果我在旧服务器上运行代码,完全相同的图片可以正常工作。

4

3 回答 3

1

那是 WINCODEC_ERR_COMPONENTNOTFOUND。这意味着 WIC 无法找到为您的流中的文件类型注册的解码器类。

这是我的建议:

在它工作的旧服务器上,打印出 InputDecoder.GetDecoderInfo().GetCLSID() 的值,也许还有 GetAuthor/GetFriendlyName。如果它是此处列出的内置 CLSID 之一,那么您的新机器上的 WIC 可能已损坏。否则,您将需要弄清楚您在旧机器上使用的解码器来自哪里,并将其安装到新机器上。

或者只是为您拥有的任何类型的文件寻找解码器。

于 2012-05-31T22:59:04.750 回答
1

问题是我运行的是 Server 2008 SP1。如问题所述,您需要在 WIC 可用之前将平台更新应用到 Server 2008(SP2 后)。(它在 R2 中本机可用)

于 2012-06-04T10:56:33.337 回答
0

以前版本的 Windows Windows Vista SP2 /Server 2008 SP2 + KB971644。没有 GUID_ContainerFormatWmp,因此无法自动检测图像格式。

我们应该使用以下代码。

CoCreateInstance(CLSID_WICWmpDecoder,NULL, CLSCTX_INPROC_SERVER,IID_IWICBitmapDecoder,(LPVOID*)&inputDecoder); 
于 2019-09-12T04:37:44.200 回答