HTML Canvas,ImageData.data.set,白色块不绘制
HTML Canvas, ImageData.data.set, white block not drawing
JSFiddle: http://jsfiddle.net/darrylcousins/Ls4n90eq/2/
我正在循环中操作像素,数据结果似乎成功,但是当放回画布时,我有一个白色块代替了数据。
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
// Create an image element
var img = document.getElementById('i');
var width = 100,
height = 100,
pixels = width * height,
data32, imageData, data, idx;
canvas = document.getElementById('canvas');
ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0, width, height);
imageData = ctx.getImageData(0, 0, width, height);
data = imageData.data;
// create 32 bit array using image data as buffer
data32 = new Uint32Array(data.buffer);
for (var y = 0; y < height; ++y) {
for (var x = 0; x < width; ++x) {
var red, green, blue, alpha;
idx = (width * y) + x;
// current data idx get the bits
red = (data32[idx] >> 0) & 0xff;
green = (data32[idx] >> 8) & 0xff;
blue = (data32[idx] >> 16) & 0xff;
alpha = (data32[idx] >> 24) & 0xff;
if (alpha > 0) {
data32[idx] =
(alpha << 24) | // alpha
(0 << 16) | // blue
(0 << 8) | // green
255; // red
} else {
data32[idx] =
(alpha << 24) | // alpha
(255 << 16) | // blue
(255 << 8) | // green
255; // red
}
if (y == 25) {
// pixels are set correctly here
// console.log(Number(data32[idx]).toString(2));
}
}
}
imageData.data.set(data32);
// but here the top block of 25px is blocked out with white
// and I don't see why :-(
ctx.putImageData(imageData, 0, 0);
在 jsfiddle 中修复:http://jsfiddle.net/darrylcousins/Ls4n90eq/4/
简单删除行:
//imageData.data.set(data32);
解决了我的问题。
非常感谢。
相关文章:
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 有没有一个javascript图形绘制库可以进行气球树布局
- 使用相同的数据集绘制各种符号
- 使用onclick绘制SVG路径
- 在谷歌地图上绘制位置数据库
- 用chart.js绘制条形图
- “可绘制地图”设置地图选项“纬度-经度”
- 多维数据集网格未在指定的分区中绘制
- 使用谷歌图表在x轴上绘制日期
- 使用fabric.js从矩形区域获取对象,并将该区域绘制到画布上
- 如何在React Native中绘制图形
- 画布中绘制的矩形区域的弹出工具提示
- 如何在OpenLayers中获取动态绘制的多边形的坐标
- 画布:逐像素绘制图像并请求动画帧计时
- D3从嵌套的JSON中绘制第二个圆环图
- 如何用d3.js绘制折线图
- 在WebGL中绘制多个二维图像
- JSXGraph:如何绘制带有箭头和无点标记的矢量
- 用图像而不是颜色填充对象(将图像绘制到画布上)
- globalCompositeOperation绘制白色背景