我正在寻找一种显示存储在字节数组中的JPEG图像的方法。这是一个用Javascript构建的Windows 8商店应用程序。字节数组从C#WinRT组件返回。它在C#中的类型是byte[]
。
基本上,我想要的是获取一个对象,以便我可以调用:
URL.createObjectURL(bytearray, {oneTimeOnly: true});
时。目前,这会生成运行时错误,因为不支持阵列接口。
提前致谢。
答案 0 :(得分:3)
我发现了一种更容易的方法。
var blob = new Blob([bytes], {type: "image/jpg"});
var url = URL.createObjectURL(blob, { oneTimeOnly: true });
Blob
实际上由URL.createObjectURL
直接支持。唯一的问题是你必须指定一个mime格式来识别缓冲区格式,在我的情况下是可能的。
答案 1 :(得分:2)
我发现目前的解决方案非常周到。因此,在将字节解决方案提供给URL之前,很少有评论:
如果您控制winrt组件 - 请检查是否可以返回StorageFile对象。在这种情况下 - 代码将简化为
var file = 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);
})