2

次のコードを使用して、リソース JPG イメージ ファイルから BitmapImage を簡単に作成できます...

Windows::Foundation::Uri^ uri = ref new Windows::Foundation::Uri(L"ms-appx:///Hippo.JPG");
Imaging::BitmapImage^ image = ref new Imaging::BitmapImage(uri);

しかし、WritableBitmap は Uri を取りません。SetSource メソッドが表示されますが、Uri ではなく IRandomaccessStream が必要です。そして、JPGファイルから作成する方法がわかりません。ネットで何度も検索しましたが、明確な答えを見つけることができませんでした。どんな助けでも大歓迎です。

こんなものが欲しい…

Windows::UI::Xaml::Media::Imaging::WriteableBitmap image = ref new Windows::UI::Xaml::Media::Imaging::WriteableBitmap();
image->SetSource(somehowGetRandomAccessStreamFromUri);

しかし、uri から IRandomaccessStream インスタンスを取得するにはどうすればよいですか? 私は今日だけ C++ Metro アプリの作業を開始したので、間違っているかもしれませんが、タマネギの皮が多すぎて複雑すぎることがわかりました。

4

1 に答える 1

2

C#では、次のようなことをします

var storageFile = await Package.Current.InstalledLocation.GetFileAsync(relativePath.Replace('/', '\\'));
var stream = await storageFile.OpenReadAsync();
var wb = new WriteableBitmap(1, 1);
wb.SetSource(stream);

C++/CX では、次のようにすると思います。

#include <ppl.h>
#include <ppltasks.h>

...

Concurrency::task<Windows::Storage::StorageFile^> getFileTask
    (Package::Current->InstalledLocation->GetFileAsync(L"Assets\\MyImage.jpg"));

auto getStreamTask = getFileTask.then(
    [] (Windows::Storage::StorageFile ^storageFile)
    {
        return storageFile->OpenReadAsync();
    });

getStreamTask.then(
    [] (Windows::Storage::Streams::IRandomAccessStreamWithContentType^ stream)
    {
        auto wb = ref new Windows::UI::Xaml::Media::Imaging::WriteableBitmap(1, 1);
        wb->SetSource(stream);
    });
于 2012-07-21T21:03:00.773 に答える