首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态加载JS的GrayScale图像

动态加载JS的GrayScale图像
EN

Stack Overflow用户
提问于 2013-04-12 10:24:15
回答 1查看 720关注 0票数 0

我试着按照这个例子来加载灰度图像http://www.html5canvastutorials.com/advanced/html5-canvas-grayscale-image-colors-tutorial/。由于我的舞台有许多其他对象,我尝试使用以下脚本:

代码语言:javascript
复制
var dImage1 = new Kinetic.Image({
                drawFunc: function (canvas) {
                    var context2 = canvas.getContext();
                    var x = 0;
                    var y = 0;
                    context2.drawImage(imageObj, x, y);
                    var imageData = context2.getImageData(x, y, imageObj.width, imageObj.height);
                    var data = imageData.data;

                    for (var i = 0; i < data.length; i += 4) {
                        var brightness = 0.34 * data[i] + 0.5 * data[i + 1] + 0.16 * data[i + 2];
                        data[i] = brightness;
                        data[i + 1] = brightness;
                        data[i + 2] = brightness;
                    }
                    context2.putImageData(imageData, x, y);
                }
            });
            layer1.add(dImage1);
            stage.add(layer1);

            var imageObj = new Image();
            imageObj.onload = function () {
                drawImage(this);
            };
            imageObj.src = .....;

我得到了这个错误: TypeMismatchError。我很感谢你的建议,提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-12 12:54:10

我在你的代码中发现了几个陷阱...

首先,即使规范说它是可选的,您也需要指定上下文模式("2d")

代码语言:javascript
复制
// must specify "2d"

var context2 = canvas.getContext("2d"); 

其次,在Kinetic.Image中使用图像之前,您需要完全加载图像

因此,将Kinetic.Image创建放在一个函数中,并在imageObj.onload中调用它:

代码语言:javascript
复制
function makeKineticImage(){

    var dImage1 = new Kinetic.Image({
        drawFunc: function (canvas) {
            var context2 = canvas.getContext("2d");
            var x = 0;
            var y = 0;
            context2.drawImage(imageObj, x, y);
            var imageData = context2.getImageData(x, y, imageObj.width, imageObj.height);
            var data = imageData.data;

            for (var i = 0; i < data.length; i += 4) {
                var brightness = 0.34 * data[i] + 0.5 * data[i + 1] + 0.16 * data[i + 2];
                data[i] = brightness;
                data[i + 1] = brightness;
                data[i + 2] = brightness;
            }
            context2.putImageData(imageData, x, y);
        }
    });
    layer1.add(dImage1);
}

stage.add(layer1);

// you must create your Kinetic.Image AFTER your image is loaded

var imageObj = new Image();
imageObj.onload = function () {
    makeKineticImage();
};
imageObj.src = .....;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15962069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档