在执行 Win 应用商店应用程序时将日期/纹理从 CLR 移动到 directx 的运行时组件的最佳方法

本文关键字:移动 CLR directx 纹理 最佳 组件 运行时 方法 应用 Win 执行 | 更新日期: 2023-09-27 17:57:19

我有一个Windows应用商店应用程序,以及一个创建SurfaceImageSource(direct3d渲染)的运行时组件(Cpp/CX)。

该应用程序显示图像的网格视图。当用户单击图像时,我想将其用作RT库中的纹理。我的选择是什么,什么是最好的。我应该将图像的路径传递给 RT Lib 并以某种方式加载它,还是应该在 CLR 中加载它并将数据作为指针传递?

在执行 Win 应用商店应用程序时将日期/纹理从 CLR 移动到 directx 的运行时组件的最佳方法

由于 Windows 应用商店应用的安全限制,传递文件名可能会崩溃。您只能使用文件选取器打开文件,或者如果您已被授予显式权限。

因此,在加载文件时,您应该保存其内容。 例如,到字节数组。以下是从StorageFile生成字节数组的方法:

//file is the input StorageFile
var sourceStream = await file.OpenReadAsync();
//do anything else with the file, e.g. creating a BitmapImage
using(MemoryStream mem = new MemoryStream())
{
    //Reset the file stream
    sourceStream.Seek(0);
    sourceStream.AsStreamForRead().CopyTo(mem);
    var bytes = mem.ToArray();
}

然后,应将字节数据传递到 DirectX 库并将其加载到纹理。或者,可以使用 BitmapDecoder 类将文件转换为原始图像数据。方法CreateAsyncGetPixelDataAsyncDetachPixelData可能会有所帮助。