1

在 KineticJS 中使用 .toImage() 方法时,我似乎总是得到一个比实际需要大得多的图像,而我只需要占据数据图像的左上角。我的舞台根据窗口大小和预定义的初始大小进行缩放(在窗口调整大小时,调用调整大小的舞台函数来设置容器的比例和大小)。当我使用 toImage() 来弥补这一点时,我应该设置某种裁剪吗?看图,整体图好像是需要的大小的两倍左右,我需要的那块大概是我需要的大小的一半,当时比例尺在0.5左右(舞台大概是一半大小,因为我使用 Chrome 并在底部打开开发人员栏以进行调试)。

这是我现在使用的:

desc.toImage({
    width: sideW / cvsObj.scale,
    height: sideH / cvsObj.scale,
    callback: function(img) {
        desc.hide();
        sideImg.transitionTo({x : sideW / 2, width : 0, duration : 0.25, callback : function() {
            // add image to emulate content
            var params = {name : 'descimg', width : sideW, height : sideH, image : img, x : sideW / 2, y : 0};
            var image = new Kinetic.Image(params);
            side.add(image);
            image.setWidth(1);
            sideImg.hide();
            image.transitionTo({x : 0, width : sideW, duration : 0.25, callback : function() {
                side.add(desc);
                desc.show();
                image.hide();
                cvsObj.page.draw();
            }});
        }});
    }
});
4

2 回答 2

0

我在两个半月前发布了这个问题,直到今天才收到回复。我一直在了解 KineticJS 的最新信息——甚至添加了我自己的错误报告和代码建议。然而,最近我重新审视了这段特定的代码,并提出了一些更好的东西——我得到的图像现在被正确裁剪,可以按原样插入到我的画布层中。这是代码:

// grp = kinetic group, iw = image width, ih = image height, rimg = returned image array for a deferred function, cvsobj.scale is a global stage scale variable (i scale the stage to fit the window)
getImage : function(grp, iw, ih, rimg) {
    var dfr = $.Deferred();
    var gp = grp.getAbsolutePosition();
    grp.toImage({
        width: iw * cvsObj.scale,
        height: ih * cvsObj.scale,
        x : gp.x,
        y : gp.y,
        callback: function(img) {
            rimg.push(img);
            dfr.resolve(rimg);
        }
    });
    return dfr.promise();
}

这是一个扩展的原型功能 - 用于将整个图层或图层的一部分转换为专门用于在动画序列中操作的图像的子部分功能的一部分。希望这对其他人有帮助。

于 2013-01-11T17:28:57.457 回答
0

随着时间的推移,KineticJs 得到了改进,现在功能以“更好”的方式工作。尝试新的 KineticJS 4.3:

 http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v4.3.0.min.js
于 2013-01-11T16:51:51.670 回答