SharpDX在Windows Phone 8中加载纹理

Can*_*ğlu 1 texture2d sharpdx windows-phone-8 dds-format

我正在创建一个Windows Phone 8应用程序,我正在使用SharpDX来加载纹理.

我试图加载PNG,Content.Load<Texture2D>("filename.png")但我有错误,我已经意识到Windows Phone 8中的SharpDX只接受DDS纹理,不接受PNG/JPEG/BMP等.我已经将我的PNG转换为DDS使用texconv filename.png并将文件添加到我的解决方案就像我在我的项目中使用的其他文件(我可以正确加载).当我运行我的应用程序时,我得到一个例外:

{SharpDX.Serialization.InvalidChunkException: Unexpected chunk [DDS /0x20534444] instead of [TKFX/0x58464B54] at SharpDX.Serialization.BinarySerializer.BeginChunk(FourCC chunkId)}

好吧,我已经使用该texconv工具将有效的PNG转换为DDS .从我看到的,它是一个文件格式错误,并且fourCC代码对应于DDS,这是应该的.但是SharpDX期望TKFX格式(工具包效应?)而不是DDS.为什么?我试图加载纹理Content.Load<Texture2D>没有Content.Load<Effect>(我也有它加载着色器,它完美地工作).

如果有人发现如何加载PNG而不是DDS,那就更好了!

Emi*_*elt 5

如果您仍想加载PNG图像,我将在此处保留此代码段:

public static Texture2D FromImage(BitmapImage image, GraphicsDevice device)
{
    WriteableBitmap bitmap = new WriteableBitmap(image);

    return FromImageData(bitmap.Pixels, bitmap.PixelWidth, 
                            bitmap.PixelHeight, device);
}

public static Texture2D FromImageData(int[] data, int width, int height, GraphicsDevice device)
{
    Texture2D texture = Texture2D.New(device, width, height,
                                    PixelFormat.B8G8R8A8.UNorm);

    texture.SetData<int>(data);

    return texture;
}
Run Code Online (Sandbox Code Playgroud)