WPFアプリケーションで/ Assets /からイメージをロードする際の問題

ローカルフォルダに保存するためにファイルを実用的に自分のプロジェクトにロードしようとすると、非常に奇妙な問題が発生します。

そのように私は私の.xamlコードでファイルをうまくロードすることができます:


そして私は自分のページにその画像を表示することができます。しかし、画像を読み込んでxaml.csコードでこのように使用しようとすると

uriMyFile = new Uri("/Assets/Submandibular_oedema.jpg", UriKind.RelativeOrAbsolute);

それはファイルを見つけることができず、結果として、私にURIを使って何もさせません。

背景として、私の目的は画像ストリームを取得し、それをローカルフォルダに保存することです。

私はそれがばかげた小さな問題になることを知っていますが、私はそれに対する解決策を見つけることができません。

ありがとうございます。

1
あなたのコメントを反映するように私の答えを更新しました。
追加された 著者 feO2x,
これはWP 7/8アプリケーションですか、それともWPFアプリケーションですか?この質問に不適切なタグを削除してください。
追加された 著者 Abbas,
なぜSystem.IO.StreamReaderを使わないのですか?
追加された 著者 Bijan,
なぜSystem.IO.StreamReaderを使わないのですか?
追加された 著者 Bijan,

6 答え

Update after Starktastics comment: I finally understood your problem: you need the Application.GetResourceStream method to retrieve a stream of your resource, read from that stream and write it to a file stream.

var streamResourceInfo = Application.GetResourceStream(uri);
var stream = streamResourceInfo.Stream;
var byteBuffer = new byte[stream.Length];
using (stream)
{
    stream.Read(byteBuffer, 0, byteBuffer.Length);
}
using (var fileStream = new FileStream("photo.jpg", FileMode.Create))
{
    fileStream.Write(byteBuffer, 0, byteBuffer.Length);
}

こちらからダウンロードできるソリューションを更新しました。

元の回答:

WPFアプリケーションを使用している場合は、プロジェクトに追加したアセットがBuild Action 'Resource'であることを確認してください。ファイルをクリックした後に、プロパティペインで確認できます。

いずれにしても、URIの構文は正しいです。私は小さなプロジェクトで自分でそれをチェックしました、そしてそれはうまくいきます。あなたはそれをダウンロードすることができますこちら(DropBox link)

コメントを残してください。

0
追加された
私はそれをリソースに変更しましたが、まだ機能していません。私は私がそれでやっていることについてちょっと混乱していると思います、私は私の次の行が 'Stream imageStream = App.GetResourceStream(uriMyFile).Stream;'であるのでイメージのためのストリームが必要ですそれから私はそれを私のコードの他の場所で問題なく使用するコードのビットと共にフォルダーにそれを保存します。上記の行は 'NullReferenceException'を呼び出しています。これは、URIが正常に構築されていないために発生したと考えられます。あなたはそれに関する何か問題を見ますか?
追加された 著者 Starktastic,

Update after Starktastics comment: I finally understood your problem: you need the Application.GetResourceStream method to retrieve a stream of your resource, read from that stream and write it to a file stream.

var streamResourceInfo = Application.GetResourceStream(uri);
var stream = streamResourceInfo.Stream;
var byteBuffer = new byte[stream.Length];
using (stream)
{
    stream.Read(byteBuffer, 0, byteBuffer.Length);
}
using (var fileStream = new FileStream("photo.jpg", FileMode.Create))
{
    fileStream.Write(byteBuffer, 0, byteBuffer.Length);
}

こちらからダウンロードできるソリューションを更新しました。

元の回答:

WPFアプリケーションを使用している場合は、プロジェクトに追加したアセットがBuild Action 'Resource'であることを確認してください。ファイルをクリックした後に、プロパティペインで確認できます。

いずれにしても、URIの構文は正しいです。私は小さなプロジェクトで自分でそれをチェックしました、そしてそれはうまくいきます。あなたはそれをダウンロードすることができますこちら(DropBox link)

コメントを残してください。

0
追加された
私はそれをリソースに変更しましたが、まだ機能していません。私は私がそれでやっていることについてちょっと混乱していると思います、私は私の次の行が 'Stream imageStream = App.GetResourceStream(uriMyFile).Stream;'であるのでイメージのためのストリームが必要ですそれから私はそれを私のコードの他の場所で問題なく使用するコードのビットと共にフォルダーにそれを保存します。上記の行は 'NullReferenceException'を呼び出しています。これは、URIが正常に構築されていないために発生したと考えられます。あなたはそれに関する何か問題を見ますか?
追加された 著者 Starktastic,

フルパスを試す(プロジェクトアセンブリを指定してください)

uriMyFile = new Uri("/YourAssemblyName;component/Assets/Submandibular_oedema.jpg",UriKind.RelativeOrAbsolute);
0
追加された

フルパスを試す(プロジェクトアセンブリを指定してください)

uriMyFile = new Uri("/YourAssemblyName;component/Assets/Submandibular_oedema.jpg",UriKind.RelativeOrAbsolute);
0
追加された

使ってみる

uriMyFile=new Uri("ms-appx:///Assets/YourImage.png"));

場所ごとに異なる地図アイコンを表示しようとしている間、これは私のために働きます。

0
追加された

使ってみる

uriMyFile=new Uri("ms-appx:///Assets/YourImage.png"));

場所ごとに異なる地図アイコンを表示しようとしている間、これは私のために働きます。

0
追加された