【问题标题】:Get WriteableBitmap from url in UWP?从 UWP 中的 url 获取 WriteableBitmap?
【发布时间】:2016-03-11 18:59:44
【问题描述】:

所以我的应用程序从一个 url 获取一个 BitmapImage,它可以工作,然后我需要将该图像分配给一个 writeablebitmap。目前我有这个:

        Debug.WriteLine("Poster opened for loading. Url=" + e);
        BitmapImage img = new BitmapImage(new Uri(e));
        Backdrop.Source = img;
        img.ImageOpened += async (s, e1) =>
        {
            WriteableBitmap wbm = new WriteableBitmap(((BitmapImage)s).PixelWidth, ((BitmapImage)s).PixelHeight);
            var storageFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri(e));
            using (var stream = await storageFile.OpenReadAsync())
            {
                await wbm.SetSourceAsync(stream);
            }
        };

这是非常糟糕的代码,但直到StorageFile.GetFileFromApplicationUriAsync() 我被告知值落在意外范围内之前,它都可以正常工作。我猜这是因为它只接受“ms-appx:///”格式,而不是“http://”。有什么办法可以让它工作吗?最终以更清洁的方式? 我以为这很容易,但这是一场噩梦。从昨天开始我就一直在尝试这样做。

附:我知道这可能看起来像重复,但我在 StackOverflow 上完全没有发现任何实际有效的东西。

【问题讨论】:

    标签: c# win-universal-app bitmapimage writeablebitmap storagefile


    【解决方案1】:

    试试这个:

    var httpClient = new HttpClient();
    var buffer = await httpClient.GetBufferAsync(pictureUri);
    var writeableBitmap = new WriteableBitmap(width, height);
    
    using (var stream = buffer.AsStream())
    {
        await writeableBitmap.SetSourceAsync(stream.AsRandomAccessStream());
    }
    

    【讨论】:

    • 这个想法奏效了,但我必须更改它以获取这样的流才能与 uwp 一起使用(httpClient 没有 .GetBufferAsync): var buffer = await httpClient.GetByteArrayAsync(e) ; MemoryStream str = new MemoryStream(buffer);
    • UWP中有两种不同的HttpClient,一种在Windows.Web.Http命名空间中,另一种在System.Net.Http中。据我记得,微软推荐使用 Windows.Web.Http 中的那个,它确实有 GetBufferAsync 方法。但是你可以在我的例子中使用任何一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 2018-04-03
    相关资源
    最近更新 更多