2017-05-10 66 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