在11.1及更高版本中,Microsoft删除了许多用于加载纹理的帮助程序(fromfile,fromstream等)。
我正在尝试将代码移植到11.2,除了这一行,一切正常:
var texture = Texture2D.FromFile<Texture2D>(device, @"C:\Texture.png");
现在所有我能找到的指导告诉我使用WIC,但我似乎无法找到任何为我提供几乎多功能的Texture2D(我发现的所有样本都需要传递像素格式等等) )。
我正在寻找一种可以让我加载文件的解决方案(不需要事先知道它们的格式或布局),并且像FromFile允许的那样从中获取Texture2D。有没有这样的甚至是关闭?我假设必须有“某些东西”,因为如果不是多余的话,他们不会弃用这样的功能。
非常感谢任何帮助。
编辑:我也想避免使用SharpDX.Toolkit,我正在寻找原始的DirectX / WIC等解决方案,因为我不想在Toolkit上添加依赖项。然而,我完全可以将任何.net Framework 4.0或4.5程序集添加为依赖项。
答案 0 :(得分:3)
除了自己编写整个WIC互操作之外,没有简单的解决方案。即使您不想使用Toolkit,也可以使用源代码,负责解码图像的类WicHelper.cs非常容易适应。
如果你想要一个不能处理所有WIC案例的非常简单的解决方案(格式映射等等),你可以查看TextureLoader.cs。
答案 1 :(得分:1)
如果您同时拥有Texture2D
和WPF BitmapImage
,这样的内容会有所帮助:
var map = device.ImmediateContext.MapSubresource(texture, 0, MapMode.WriteDiscard, MapFlags.None);
bitmap.CopyPixels(Int32Rect.Empty, map.DataPointer, bitmap.PixelWidth * bitmap.PixelHeight * 4, bitmap.PixelWidth * 4);
device.ImmediateContext.UnmapSubresource(source, 0);
你提到的功能可能在引擎盖下非常相似。
如果您不确定位图是否为Bgra,则必须先将其转换。