2017-05-10 85 views
0

我想在朋友的計算機上測試我的應用程序,以檢查我的工作是否在其他人的計算機上運行。 (我是否包含所有庫?等等)處理DDS文件時BitmapDecoder的崩潰

但是,當我加載* .dds紋理時,我的應用程序崩潰。我在場景的2D背景中使用它們。下面是我使用的加載DDS紋理並將其轉換爲位圖的代碼:

using (SharpDX.WIC.BitmapDecoder bitmapDecoder = new SharpDX.WIC.BitmapDecoder(ImagingFactory, new MemoryStream(iconInfo.Data, false), SharpDX.WIC.DecodeOptions.CacheOnDemand)) 
{ 
    using (SharpDX.WIC.FormatConverter formatConverter = new SharpDX.WIC.FormatConverter(ImagingFactory)) 
    { 
     formatConverter.Initialize(bitmapDecoder.GetFrame(0), SharpDX.WIC.PixelFormat.Format32bppPRGBA, SharpDX.WIC.BitmapDitherType.None, null, 0.0, SharpDX.WIC.BitmapPaletteType.Custom); 

     SharpDX.DataStream dataStream = new SharpDX.DataStream(formatConverter.Size.Height * formatConverter.Size.Width * 4, true, true); 
     formatConverter.CopyPixels(formatConverter.Size.Width * 4, dataStream); 

     _icons.Add(iconInfo.Name, new SharpDX.Direct2D1.Bitmap(renderTarget, new SharpDX.Size2(formatConverter.Size.Width, formatConverter.Size.Height), dataStream, 
      formatConverter.Size.Width * 4, bitmapProperties)); 
    } 
} 

「iconInfo.Data」是一個DDS紋理數據字節。

拋出的異常是

SharpDX.SharpDXException: HRESULT: [0x88982F50], Module: [SharpDX.WIC], ApiCode: [WINCODEC_ERR_COMPONENTNOTFOUND/Componentnotfound], Message: Unknown 
    at SharpDX.Result.CheckError() 
    at SharpDX.WIC.ImagingFactory.CreateDecoderFromStream_(IntPtr streamRef, Nullable`1 guidVendorRef, DecodeOptions metadataOptions, BitmapDecoder decoderOut) 
    at SharpDX.WIC.BitmapDecoder..ctor(ImagingFactory factory, Stream streamRef, DecodeOptions metadataOptions) 

你有任何想法是什麼引起的問題?

+0

沒有想法?沒有人? :' - ( – Endgegner85

+0

WINCODEC_ERR_COMPONENTNOTFOUND表示您已嘗試解碼圖像,並且沒有安裝合適的編解碼器。您正在測試哪個版本的Windows?並且可以在Windows照片查看器中打開DDS文件嗎? – saucecontrol

+0

在我的機器上Win10,包括所有更新)一切都很好,我的朋友在他的電腦上使用「Microsoft Windows 7 Home Premium,64-Bit Version 6.1.7601」測試了我的遊戲 – Endgegner85

回答

0

DDS文件的WIC編解碼器有許多重要的限制。首先,它只包含在Windows 8.1或更高版本中。其次,它只支持BC1/BC2/BC3(又名DXT1-DXT5)格式。請參閱MSDN

一般來說,您最好使用專用的DDS紋理加載器。

+0

我用一個名爲Compressonator的工具從* .png進入* .dds BC3。在這個改變之後加載紋理時我得到了95%的加速,我爲模型紋理編寫了一個DDS-Importer,但是我使用這種方法來製作UI紋理,您能推薦一個加載器嗎? – Endgegner85