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

时间:2013-04-07 12:34:02

标签: javascript windows-8 windows-store-apps winjs

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

基本上,我想要的是获取一个对象,以便我可以调用:

URL.createObjectURL(bytearray, {oneTimeOnly: true});

时。目前,这会生成运行时错误,因为不支持阵列接口。

提前致谢。

2 个答案:

答案 0 :(得分:3)

我发现了一种更容易的方法。

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

Blob实际上由URL.createObjectURL直接支持。唯一的问题是你必须指定一个mime格式来识别缓冲区格式,在我的情况下是可能的。

答案 1 :(得分:2)

我发现目前的解决方案非常周到。因此,在将字节解决方案提供给URL之前,很少有评论:

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

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

  3. 现在解决方案:

    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);
    })