uint8clampearray替代或使Uint8Array产生一个字节值的固定字符串
Uint8ClampedArray alternative or make Uint8Array produce a clamped string of byte values
我正在研究这个真正的令人挠头的问题!
我成功地将字节值添加到Uint8ClampedArray,并使用该数组使用此函数生成字节字符串:
this.utf8ArrayToStr = function(array) {
var s = '';
for (var i = 0; i < array.length; i++) {
s += String.fromCharCode(array[i]);
}
return s;
};
此操作成功地生成了正确的字节序列。
问题是,并不是所有的浏览器都支持Uint8ClampedArray,我特别需要它在Android浏览器上工作。
我尝试使用标准Uint8Array,但它会在结果字符串中产生额外的字节值,导致错误的行为。
我也在这里找到了一个小垫片,但它没有工作,再次产生额外的输出:https://gist.github.com/gengkev/2295355
无论如何,我可以让Uint8Array作为Uint8ClampedArray,或者更具体地说,夹住值,同时在上面的函数中生成字符串?
更新:它看起来像我得到某处使用标准数组,但仍然有一些混乱的字符导致问题。
我认为你不应该使用Uint8Array来存储你的数据-它根本不像Uint8ClampedArray那样工作。例如:
a = new Uint8Array(1);
b = new Uint8ClampedArray(1);
a[0] = 256;
b[0] = 256;
a[0] === 0; // true
b[0] === 255; // true
我只会使用一个常规数组(如果有的话),并在将它们存储到其中时夹紧值,或者当您读取它们以生成字符串时,像这样:
s += String.fromCharCode(Math.max(0, Math.min(255, array[i])));
WhatWG推荐Uint8ClampedArray用于存储画布像素数据。
但是,各种浏览器使用Uint8ClampedArray(或不)取决于他们是否实现了WhatWG的建议。
因此,一个更跨浏览器的解决方案是使用. getimagedata从画布中拉出一个数组,然后根据需要操作该数组。这样你就知道你在使用一个兼容的数组。var imageData = context.getImageData(0,0,canvas.width,canvas.height);
var data = imageData.data; // this array is always compatible with its browser.
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 视频标签仅在移动设备上调用一个字节的数据(Node.js)
- 如何在 Javascript 中声明一个字节数组
- 创建一个字节数组并获得相同的 Java 和 JavaScript 输出
- 在 .NET 和 JavaScript 中存储一个字符需要多少字节
- Knockoutjs 将一个 observableArray 绑定到字节
- 如何在Javascript中从字节数组中获得一个BigInteger
- 如何在javascript中转换一个对象为字节数组
- 将JSON发送到WebAPI - JSON对象包含一个图像(字节)-得到错误:表达式太长或太复杂而无法编译
- 我怎么能'依恋'一个ASP.. NET字节数组到'文件'在表单上键入输入字段
- 路径必须是一个没有空字节的字符串'当管道流要求时
- JavaScript:一个字节应该是8位
- uint8clampearray替代或使Uint8Array产生一个字节值的固定字符串
- 如何得到一个字节的最后2位
- 用Javascript获取一个字节的值
- 如何读取一个ArrayBuffer与二进制数据在“4字节”单/浮点/IEEE 754编码数据
- 拉斐尔.2.1.0.min.js有一个无效的UTF-8字节序列
- 是否有一个函数来查找当前使用xmlhttprequest从文件加载的字节数
- 将一个字节(数)按除法的小数部分移位
- js如何将0和1的字符串转换为一个字节