3

だから私が基本的にしようとしているのは、URLからあらゆるタイプの画像(png、jpgなど...)を読み取り、その純粋なピクセルデータを取得できるようにすることです。これまでのところ、私はこのコードを持っています。

  public static async Task<BitmapImage> DownloadImageFromWebsiteAsync(string url)
    {
        try
        {
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
            using (WebResponse response = await request.GetResponseAsync())
            {
                Stream imageStream = response.GetResponseStream();

                using (var result = new MemoryStream())
                {
                    await imageStream.CopyToAsync(result);
                    byte[] array = result.ToArray();
                    return await ByteArrayToBitmapImage(array);
                }

            }
        }
        catch (WebException ex)
        {
            Debug.WriteLine(ex.Message);
            return null;
        }
    }

    private static async Task<BitmapImage> ByteArrayToBitmapImage(byte[] byteArray)
    {
        var bitmapImage = new BitmapImage();

        var stream = new InMemoryRandomAccessStream();
        await stream.WriteAsync(byteArray.AsBuffer());
        stream.Seek(0);

        bitmapImage.SetSource(stream);

        return bitmapImage;
    } 

jpeg などのエンコーディングのため、純粋な byte[] をピクセルとして取得することはできません。URLから画像をダウンロードし、デコードし、ピクセルバッファを取得する方法はあるのだろうかと思っていました。助けていただければ幸いです。ありがとうございました。

4

1 に答える 1

2

これを試して。using System.Runtime.InteropServices.WindowsRuntime;手動で追加する必要があります。

private async Task<byte[]> GetBytesFromImage(string URL)
{
    byte[] srcPixels;
    var uri = new Uri(URL);
    var streamRef = RandomAccessStreamReference.CreateFromUri(uri);

    using (IRandomAccessStreamWithContentType fileStream = await streamRef.OpenReadAsync())
    {
        BitmapDecoder decoder = await BitmapDecoder.CreateAsync(fileStream);
        PixelDataProvider pixelProvider = await decoder.GetPixelDataAsync();
        srcPixels = pixelProvider.DetachPixelData();
    }

    return srcPixels;
}
于 2013-08-31T03:48:52.877 に答える