1

「 Canvas で画像フィルターを作る」からラプラスの例をとったのですが、以下の行の Math.min() 関数の使い方がわかりません。誰かがラプラスの方法を説明できますか?

var weights = [-1,-1,-1,
   -1, 8,-1,
   -1,-1,-1];
        var opaque = true;
        var side = Math.round(Math.sqrt(weights.length));
        var halfSide = Math.floor(side/2);
    var imgd = context.getImageData(0, 0, canvas.width, canvas.height);

    var src = imgd.data;
    var sw = canvas.width;
    var sh = canvas.height;

    var w = sw;
    var h = sh;
    var output = contextNew.createImageData(w, h);
    var dst = output.data;

    var alphaFac = opaque ? 1 : 0;

    for (var y=0; y<h; y++) {
        for (var x=0; x<w; x++) {
            var sy = y;
            var sx = x;
            var dstOff = (y*w+x)*4;
            var r=0, g=0, b=0, a=0;
            for (var cy=0; cy<side; cy++) {
                for (var cx=0; cx<side; cx++) {
                    var scy = Math.min(sh-1, Math.max(0, sy + cy - halfSide));
                    var scx = Math.min(sw-1, Math.max(0, sx + cx - halfSide));
                    var srcOff = (scy*sw+scx)*4;
                    var wt = weights[cy*side+cx];
                    r += src[srcOff] * wt;
                    g += src[srcOff+1] * wt;
                    b += src[srcOff+2] * wt;
                    a += src[srcOff+3] * wt;
                }
            }
            dst[dstOff] = r;
            dst[dstOff+1] = g;
            dst[dstOff+2] = b;
            dst[dstOff+3] = a + alphaFac*(255-a);
        }
    }
4

1 に答える 1