首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从UWP中的HTTP Get获取SoftwareBitmap

从UWP中的HTTP Get获取SoftwareBitmap
EN

Stack Overflow用户
提问于 2018-06-14 19:39:32
回答 1查看 122关注 0票数 1

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

由于不允许我在UWP中直接访问文件,我只有两个选择:

文件选择器(不希望的),或者从Http服务器获取文件,

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

代码语言:javascript
复制
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格式( OcrEngine可以接受)

从这个link中,我找到了一个有用的代码示例,用它我可以获得BitmapImage格式的文件

代码语言:javascript
复制
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;
        }
    }
}

如何将此BitmapImage转换为SoftwareBitmap

或者,我如何直接将其作为SoftwareBitmap获取?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-15 03:52:09

您可以通过使用HttpClient获取图像并将内容流转换为IRandomAccessStream来完成此操作

代码语言:javascript
复制
HttpClient client = new HttpClient();
var response = await client.GetAsync("http://my.image");
var stream = await response.Content.ReadAsStreamAsync();
IRandomAccessStream randomAccessStream = stream.AsRandomAccessStream();

从那里开始,它与您已经拥有的相同

代码语言:javascript
复制
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(randomAccessStream);
softwareBitmap = await decoder.GetSoftwareBitmapAsync();

请注意,AsRandomAccessStreamSystem.IO命名空间中的一个扩展方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50856714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档