3

.NETアプリ用にWICを使用して作成したサムネイル生成ルーチンがあります。過去1年間は正常に機能していましたが、新しいサーバーに移行したばかりです。

古いサーバーはW2k8R2EnterpriseSP1でした新しいサーバーはW2k8StandardSP1です

これが失敗しているコードです

    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が、ストリーム内のファイルのタイプに登録されているDecoderクラスを見つけることができなかったことを意味します。

これが私が提案することです:

それが動作する古いサーバーで、InputDecoder.GetDecoderInfo()。GetCLSID()の値を出力し、場合によってはGetAuthor/GetFriendlyNameも出力します。ここにリストされている組み込みのCLSIDのいずれかである場合は、新しいマシンのWICが壊れている可能性があります。それ以外の場合は、古いマシンで使用しているデコーダーがどこから来たのかを把握し、新しいマシンにインストールする必要があります。

または、お持ちのファイルの種類に関係なく、デコーダーを探してください。

于 2012-05-31T22:59:04.750 に答える
1

問題は、Server2008SP1を実行していたことでした。この質問で説明されているように、WICが利用可能になる前に、プラットフォームの更新をServer 2008(SP2以降)に適用する必要があります。(R2でネイティブに利用可能です)

于 2012-06-04T10:56:33.337 に答える
0

以前のバージョンのWindowsWindowsVista SP2 / Server 2008 SP2+KB971644。GUID_ContainerFormatWmpがないため、画像形式を自動的に検出できません。

次のコードを使用する必要があります。

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