如何在UWP中从HTTPGET获取软件位图?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (52)

我正在处理一个需要使用OCR处理文件的项目,

由于我不允许直接在UWP中访问文件,因此我只有两种选择: 文件选取器(不合需要的),或从Http服务器获取文件,

我能够使用文件选择器,这是我的实现:

SoftwareBitmap softwareBitmap;

FileOpenPicker fileOpenPicker = new FileOpenPicker();
fileOpenPicker.FileTypeFilter.Add(".jpg");
fileOpenPicker.ViewMode = PickerViewMode.Thumbnail;

var inputFile = await fileOpenPicker.PickSingleFileAsync();

using (IRandomAccessStream stream = await inputFile.OpenAsync(FileAccessMode.Read))
{
    BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
    softwareBitmap = await decoder.GetSoftwareBitmapAsync();
}

OcrEngine ocrEngine = OcrEngine.TryCreateFromLanguage(new Windows.Globalization.Language("fr-FR"));
OcrResult ocrResults = await ocrEngine.RecognizeAsync(softwareBitmap);
OcrLine ocrResult = ocrResults.Lines[0];

string text = ocrResult.Text;

现在我试图从HTTP GET请求中获取文件,但我无法弄清楚如何用SoftwareBitmap格式

从这个链接,我发现这个有用的代码示例,我用它获取BitmapImage格式的文件

private async void Populate()
{
    string QRServiceAPI = "https://api.qrserver.com/v1/create-qr-code/?data={0}&size={1}x{2}";
    string q = string.Format(QRServiceAPI, "http://solatys.com", 150, 150);
    using (var d = new Downloader())
    {
        var feed = await d.GetDataFeed(q);
        feed.Seek(0, SeekOrigin.Begin);
        BitmapImage bmp = new BitmapImage();

        using (InMemoryRandomAccessStream ms = new InMemoryRandomAccessStream())
        {
            using (DataWriter writer = new DataWriter(ms.GetOutputStreamAt(0)))
            {
                writer.WriteBytes((byte[])feed.ToArray());
                writer.StoreAsync().GetResults();
            }
            var image = new BitmapImage();
            image.SetSource(ms);
            Image1.Source = image;
        }
    }
}

我能做些什么来将其转换BitmapImageSoftwareBitmap? 或者我怎样才能直接得到SoftwareBitmap

提问于
用户回答回答于

你可以通过使用HttpClient获取映像并将内容流转换为IRandomAccessStream来实现这一点。

HttpClient client = new HttpClient();
var response = await client.GetAsync("http://my.image");
var stream = await response.Content.ReadAsStreamAsync();
IRandomAccessStream randomAccessStream = stream.AsRandomAccessStream();

从那里看,和你已经拥有的一样

BitmapDecoder decoder = await BitmapDecoder.CreateAsync(randomAccessStream);
softwareBitmap = await decoder.GetSoftwareBitmapAsync();

请注意AsRandomAccessStream中的扩展方法。System.IO命名空间。

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动