萌新的Canvas笔记(三)

用了图形变换的方法尝试了一个Demo之后,再来看一个图形变换的方法。

transform(a,b,c,d,e,f)

这个函数本质利用了一个图形变换矩阵,从左到右的参数依次是,水平缩放,水平倾斜,垂直倾斜,垂直缩放,水平位移,垂直位移。
使用了transform之后,会对之后要绘制的图形产生相应的变换。

setTransform(a,b,c,d,e,f)

由于transform是累计的,当使用过多的时候,会导致不知该如何变化才能达到想要的效果。使用setTransform,会忽略掉之前transform指定的变换,而从初始状态开始,设置一个全新的变换。

渐变之线性渐变

之前的fillStyle属性,不仅仅可以设置单独的颜色,否则就变成fillColor了。对于fillStyle,还可以用来设置渐变色。方法如下:

        1.创建一个渐变线,表明渐变的方向。
        2.对渐变线进行颜色设置。

代码如下:

var grd = context.createLinearGradient(0, 0, 0, 800);
            grd.addColorStop(0.0, "#fff");
            grd.addColorStop(1.0, "#000");
            context.fillStyle = grd;
            context.fillRect(0, 0, 800, 800);

效果如下:
这里写图片描述

解释: context.createLinearGradient创建一个渐变线,参数指明两个点,渐变线就为这两个点确定的线段。addColorStop为渐变线的每一部分指定颜色,第一个参数为从0.0~1.0的浮点数,可以指定多个渐变步骤。比如 0.0~0.5~1.0。

补充:

    如果画布的过大,那么后面剩余的部分的颜色,会与最后的渐变色步骤颜色一致,即与1.0位置的颜色一致。 前面也同理。
    如果过小,则只会将所在位置的颜色填充出来。忽略超过画布的部分。

渐变之径向渐变

    有了线性渐变的基础后,理解径向渐变就容易的多
    同样,径向渐变也分为两个步骤:
        1.定义两个同心圆,为渐变范围(代替渐变线)
        2.定义颜色的渐变步骤(addColorStop)

代码:

            var radialgrad = context.createRadialGradient(400, 400, 0, 400, 400, 500);
            radialgrad.addColorStop(0.0, "white");
            radialgrad.addColorStop(0.25, "yellow");
            radialgrad.addColorStop(0.5, "green");
            radialgrad.addColorStop(0.75, "blue");
            radialgrad.addColorStop(1.0, "black");
            context.fillStyle = radialgrad;
            context.fillRect(0, 0, 800, 800);

效果如下:
这里写图片描述

解释:
没什么好解释的。。跟线性渐变差不多

使用图片背景

fillStyle还允许使用图片来当做背景。道理与之前的一样,只不过这次是先创建pattern,并且设置好相关状态以后,再赋值给fillStyle。代码如下:
            var icon = new Image();
            icon.src = "icon.jpg";
            icon.onload = function (){
                var pattern = context.createPattern(icon, "no-repeat");
                context.fillStyle = pattern;
                context.fillRect(0, 0, 800, 800);
            }

其中,方式可以是no-repeat,repeat-x,repeat-y,repeat这几种。
效果:
这里写图片描述

也可以将图片改成一个canvas,也有效果。也就是说允许我们自己绘制一个图像来当做背景。

也可以使用video做背景。这个以后再接触。

以上~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值