3

メトロ アプリで、(Image 型のオブジェクトに格納されている) 画像を格納用の文字列に変換する必要があります (後で、表示用の Image オブジェクトに変換する必要があります)。

.NET 4.0 などで画像を base64 文字列に変換するための多くの回答を見つけましたが、4.5 では System.Windows.Bitmap 名前空間がありません (Image クラスは Windows.UI.Xaml.Media.Imaging にあります)。 4.0 で「Save()」を可能にしたその名前空間にあったメソッドは、4.5 にはないようです...見つけられない場合を除きます。

ここでこれを行う例がありますが、私が言ったように、メトロアプリ/.NET 4.5では機能しません

何か案は?

詳細: これを行うメソッドは、イメージ オブジェクトを含むインスタンス フィールドを変換し (source プロパティを使用しましたが、これは正しいですか?)、変換の結果の文字列をインスタンス文字列フィールドに格納する必要があります。次に、このオブジェクト全体をシリアライズし、Image フィールドを無視して、後でデシリアライズし、文字列を Image フィールドに復元して表示することができます。これまでのところ、DataContractSerializer を使用して画像から文字列をシリアル化しようとしましたが、気に入らないようです。画像から文字列を取得したら、それをシリアル化できますが、これまでに行ったことはありません。

また、間違いなく正しい.net 4.5ドキュメントは、次のページだけのようです: http://msdn.microsoft.com/library/windows/apps/

.net 4.5 の「通常の外観」の msdn サイトのページは、メトロ アプリで常に機能するとは限りませんか? (ただの理論?)

【解決済み】

ついに手に入れました!これをしなければならない他の人のために、答えはここにあります:

これは私がしました

var reader = new DataReader(myMemoryStream.GetInputStreamAt(0));
var bytes  = new byte[myMemoryStream.Size];
await reader.LoadAsync((uint)myMemoryStream.Size);
reader.ReadBytes(bytes);

このシーケンスの後、バイト配列bytesにはストリームからのデータが含まれます。そこから、文字列を値に設定します

Convert.ToBase64String(bytes);
4

4 に答える 4

2

やっと手に入れた!これを行う必要がある他の人のために、答えはここにあります:http ://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/38c6cb85-7454-424f-ae94-32782c036567/

これは私がしました

var reader = new DataReader(myMemoryStream.GetInputStreamAt(0));
var bytes  = new byte[myMemoryStream.Size];
await reader.LoadAsync((uint)myMemoryStream.Size);
reader.ReadBytes(bytes);

このシーケンスの後、バイト配列バイトにはストリームからのデータが含まれます。そこから、文字列を次の値に設定します。

Convert.ToBase64String(bytes);
于 2013-03-04T20:18:59.767 に答える
1

ここに.net4.5がインストールされていないため、これはわかりませんが、これでうまくいくと思います。

BitmapSource.CopyPixels()メソッドを使用して、画像のピクセルを抽出できます。

http://msdn.microsoft.com/en-us/library/ms616043(v=vs.110).aspx

次に、Convert.ToBase64String()を使用して変換を実行します。

また、ここにいくつかの有用なイメージングのハウツーがあります:

http://msdn.microsoft.com/en-us/library/ms750864(v=vs.110

于 2012-07-24T18:55:24.600 に答える
0

画像のエンコードされた形式(たとえばJPEG)形式を保存し、byte []に​​デコードして戻し、MemoryStreamを作成する必要があります。そうすれば、MetroBitmapImageをストリームから作成できます。

于 2012-07-24T20:22:02.670 に答える
0

試してみてくださいBitmapEncoderここでBitmapEncoderを作成する方法の例。適切な名前空間はWindows.Graphics.Imagingです。

BitmapEncoderエンコーダーを取得します。その後、を使用GetPixelDataAsync(BitmapPixelFormat, BitmapAlphaMode, BitmapTransform, ExifOrientationMode, ColorManagementMode)してピクセルデータを取得できます。その後、任意の汎用C#base64エンコーダーを使用できます。

(例はJavascriptですが、クラスはC#に存在するため、C#でも機能するはずです)

于 2012-07-24T18:53:03.243 に答える