2

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

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

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

之上。目前这会产生运行时错误,因为不支持数组接口。

提前致谢。

4

2 回答 2

3

我发现了一个更简单的方法。

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

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

于 2013-04-10T13:09:11.727 回答
2

我发现的当前解决方案非常全面。因此,在给出字节到 URL 的解决方案之前,有几条评论:

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

    var 文件 = MSApp.createFileFromStorageFile(storageFile); var url = URL.createObjectURL(file, { 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);
})
于 2013-04-07T14:47:03.640 回答