Javascript WinJS,显示字节数组中的图像?

Javascript WinJS,显示字节数组中的图像?,javascript,windows-8,windows-store-apps,winjs,Javascript,Windows 8,Windows Store Apps,Winjs,我正在寻找一种显示存储在字节数组中的JPEG图像的方法。这是一个内置Javascript的Windows 8应用商店应用程序。字节数组是从C#WinRT组件返回的。它在C中的类型是字节[] 基本上,我想要的是得到一个对象,这样我就可以调用: URL.createObjectURL(bytearray, {oneTimeOnly: true}); 上。当前,由于不支持阵列接口,因此会生成运行时错误 提前感谢。我找到的当前解决方案非常全面。因此,在给出字节到URL的解决方案之前,请注意以下几点:

我正在寻找一种显示存储在字节数组中的JPEG图像的方法。这是一个内置Javascript的Windows 8应用商店应用程序。字节数组是从C#WinRT组件返回的。它在C中的类型是
字节[]

基本上,我想要的是得到一个对象,这样我就可以调用:

URL.createObjectURL(bytearray, {oneTimeOnly: true});
上。当前,由于不支持阵列接口,因此会生成运行时错误


提前感谢。

我找到的当前解决方案非常全面。因此,在给出字节到URL的解决方案之前,请注意以下几点:

  • 如果有更好的方法从字节获取DOM流/blob对象,请尝试
  • 如果控制winrt组件,请检查是否可以返回StorageFile对象。在这种情况下-代码将简化为

    var file=MSApp.createFileFromStorageFile(storageFile); var url=url.createObjectURL(文件,{oneTimeOnly:true})

  • 现在解决方案:

    var bytes;
    var memoryStream;    
    var streams = Windows.Storage.Streams;
    {
    
        // get IBuffer out of bytes
        var dataWriter = new streams.DataWriter();
        dataWriter.writeBytes(bytes);
        var buffer = dataWriter.detachBuffer();
        dataWriter.close();
    
        // get IInputStream out of IBuffer
        memoryStream = new streams.InMemoryRandomAccessStream();
        return memoryStream.writeAsync(buffer);
    }).then(function onmemorystreamwritecomplete()
    {
        var inputStream = memoryStream.getInputStreamAt(0);
    
        // get DOM MSStream from IInputStream
        var domMStream = MSApp.createStreamFromInputStream('image/jpg', inputStream);
        var url = URL.createObjectURL(domMStream, { oneTimeOnly: true });
        memoryStream.close();
        test3Img.setAttribute('src', url);
    })
    

    我发现了一个简单得多的方法

    var blob = new Blob([bytes], {type: "image/jpg"});
    var url = URL.createObjectURL(blob, { oneTimeOnly: true });
    

    Blob
    实际上由
    URL.createObjectURL
    直接支持。唯一需要注意的是,您必须指定mime格式来标识缓冲区格式,在我的例子中,这是可能的。

    您是否检查过WinJS.xhr:Hmm。。我不是在寻找下载或传输文件的方法。xhr对我的情况有什么帮助?该图像不是来自web。虽然我在WinJS中不专业,但我找到了文件到字节数组解决方案,这可能会有所帮助:嗨,非常感谢您提供的解决方案。我确实可以控制C#WinRT组件。转换程序与此相同吗?为什么您会建议在组件中这样做,这是一个性能问题吗?保持简单总是有帮助的。这个代码段执行bytes->IBuffer->IInputStream->MSStream->URL,而另一个代码段可以执行StorageFile->File->URL。顺便问一下,在c#winrt组件中从文件中读取字节有什么原因吗。这可以在js代码中完成。