0

Windows ストア アプリと、SurfaceImageSource (direct3d レンダリング) を作成するランタイム コンポーネント (Cpp/CX) があります。

アプリは画像のグリッドビューを表示します。ユーザーが画像をクリックすると、RT ライブラリでテクスチャとして使用したいと考えています。私の選択肢は何ですか、何が最善ですか。画像へのパスを RT Lib に渡して何らかの方法でそこにロードする必要がありますか、それとも CLR にロードしてデータをポインタとして渡す必要がありますか?

4

1 に答える 1

0

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クラスを使用してファイルを生の画像データに変換することもできます。メソッドCreateAsyncGetPixelDataAsyncおよびDetachPixelDataが役立つ場合があります。

于 2013-02-10T15:32:47.647 に答える