3

BitmapImage(Windows.UI.Xaml.Media.BitmapImage)をByte []配列に変換する方法はありますか?私が試したことは何もありません....別の可能なシナリオ(BitmapImageをバイト配列に変換できない場合)は、Webから画像をダウンロードしてから、それを配列に変換することです...

でもどうすればいいのかわからない…誰かアイデアがあれば本当にいいですね。

現在の試み:

        HttpClient http = new HttpClient();
        Stream resp = await http.GetStreamAsync("http://localhost/img/test.jpg");

        var ras = new InMemoryRandomAccessStream();
        await resp.CopyToAsync(ras.AsStreamForWrite());

        BitmapImage bi = new BitmapImage();
        bi.SetSource(ras);


        byte[] pixeBuffer = null;

        using (MemoryStream ms = new MemoryStream())
        {
            int i = bi.PixelHeight;
            int i2 = bi.PixelWidth;
            WriteableBitmap wb = new WriteableBitmap(bi.PixelWidth, bi.PixelHeight);

            Stream s1 = wb.PixelBuffer.AsStream();
            s1.CopyTo(ms);

            pixeBuffer = ms.ToArray();
        }

しかし、それは機能しません... iとi2は常に0に設定されています。したがって、rasは正しく機能しません...何が起こっているのでしょうか。

ありがとう

4

1 に答える 1

1

あなたのコードでは、BitmapImage が Web から画像をロードするのを待っていることはないので、アクセス時に PixelWidth/PixelHeight を認識しません。たとえば、「await bi.WaitForLoadedAsync() 」を呼び出してAsyncUIライブラリを使用するなど、ロードされるのを待つことができます。BitmapImage ではピクセルにアクセスできず、現在 BitmapImage を WriteableBitmap に変換する API がないため、デコードされたピクセルにアクセスしたい場合、これはあまり役に立ちません。

トピックに関する以前の質問を確認できます。HttpClient.GetAsync()などを使用して Web から画像ファイルを取得し、BitmapDecoderなどを使用してロードする必要があります。

于 2012-05-06T20:46:09.687 に答える