java - 我怎样才能加快这个 JavaScript 绘画应用程序的速度?

标签 java javascript html flash canvas

好吧,我已经构建了一个绘画应用程序,其中包括使用 HTML Canvas 的油漆桶工具。油漆桶的问题在于,即使我尽可能地提高它的效率,它也需要很长时间才能响应。这是浏览器处理能力不足的问题吗? Javascript 只是慢吗? Canvas 只是慢吗?

Java 会是此类处理器密集型功能的最佳替代方案吗?或者也许是闪光?

好的,这是一些代码。顶部部分(换行符之前)运行,然后换行符下方的部分运行四次,从光标开始每个方向运行一次。 (左、上、右、下)明显显示的是向左一像素。

if (typeof paintPos[x] === 'undefined') {
    paintPos[x] = {};
}
paintPos[x][y] = x+'|'+y;

var runRecurse = 0;
if (typeof paintPos[x-1] === 'undefined') {
    runRecurse = 1;
} else if (typeof paintPos[x-1][y] === 'undefined') {
    runRecurse = 1;
}
if (runRecurse === 1) {
    if (x-1 >= 0) {
        var colData = ctx.getImageData(x-1, y, 1, 1).data;
        var colHexNew = "#" + ("000000" + 
            rgbToHex(colData[0],colData[1],colData[2])).slice(-6);
        if (colHex === colHexNew) {
            setPaintPos(x-1,y,colHex);
        }
    }
}

然后,要实际绘画,我只需这样做:

$.each(paintPos,function(key,value) {
    $.each(paintPos[key],function(key2,value2) {
        var paintCol = value2.split('|');
        var paintX = paintCol[0];
        var paintY = paintCol[1];
        ctx.fillRect(paintX,paintY,1,1);
    });
});

最佳答案

您正在执行像素级操作。绘制微小的 1 像素矩形可能不是最有效的方法。

HTML5 Canvas 通过 getImageData 提供对 Canvas 像素的访问功能。此函数返回包含 Canvas 区域的像素数据(每像素 4 个字节,rgba 格式)的 byte[] 缓冲区。

然后您可以廉价地操作该 byte[] 中的像素。

构建图片后,您可以使用 putImageData 将数据绘制回 Canvas 中.

这个教程看起来不错:http://creativejs.com/2011/12/day-3-play-with-your-pixels/

关于java - 我怎样才能加快这个 JavaScript 绘画应用程序的速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20008876/

相关文章:

java - 可执行 JAR 中的 OpenJDK 只有 : Why does getResourceAsStream() not return MANIFEST. MF

java - 如何使用 Android Java 录制直播?

javascript - Cassandra - 类型错误 : "value" argument is out of bounds

javascript - jQuery 找不到指定 id 的 div

php - 通过电子邮件发送动态生成的调查页面的内容

java - 在 Hibernate 中的实体方法内使用命名查询

java - OpenGL : glLoadMatrix & depth buffer

javascript - TypeError History.js 问题

javascript - 如何在Angular JS中动态生成表单?

html - 为什么列表项与其父项之间有空格分隔?