zoukankan      html  css  js  c++  java
  • HTML5中的Canvas(颜色)【转载】

    原文:http://eyehere.net/2011/html5-canvas-color/

    这一次讲解Canvas中的颜色应用,同时Canvas中的颜色还能带透明,太酷了~~

    指定颜色

    现在为止我们画的图形都是黑色的,这是Canvas绘制的默认色彩,要想换一种颜色的话,就得在实际画之前指定颜色。

    ctx.strokeStyle = color

    —— 指定绘制线的颜色

    ctx.fillStyle = color

    —— 指定填充的颜色

    来看看实际的例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    onload = function() {
      draw();
    };
    function draw() {
      var canvas = document.getElementById('c1');
      if ( ! canvas || ! canvas.getContext ) { return false; }
      var ctx = canvas.getContext('2d');
      ctx.beginPath();
      ctx.fillStyle = 'rgb(192, 80, 77)'; // 红
      ctx.arc(70, 45, 35, 0, Math.PI*2, false);
      ctx.fill();
      ctx.beginPath();
      ctx.fillStyle = 'rgb(155, 187, 89)'; // 绿
      ctx.arc(45, 95, 35, 0, Math.PI*2, false);
      ctx.fill();
      ctx.beginPath();
      ctx.fillStyle = 'rgb(128, 100, 162)'; // 紫
      ctx.arc(95, 95, 35, 0, Math.PI*2, false);
      ctx.fill();
    }

    效果如下图:

    指定透明度

    和普通的CSS中一样,我们指定颜色的时候还可以带一个alpha值(不过用的不多,IE9之前都不支持)。看代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    onload = function() {
      draw();
    };
    function draw() {
      var canvas = document.getElementById('c1');
      if ( ! canvas || ! canvas.getContext ) { return false; }
      var ctx = canvas.getContext('2d');
      ctx.beginPath();
      ctx.fillStyle = 'rgba(192, 80, 77, 0.7)'; //
      ctx.arc(70, 45, 35, 0, Math.PI*2, false);
      ctx.fill();
      ctx.beginPath();
      ctx.fillStyle = 'rgba(155, 187, 89, 0.7)'; //
      ctx.arc(45, 95, 35, 0, Math.PI*2, false);
      ctx.fill();
      ctx.beginPath();
      ctx.fillStyle = 'rgba(128, 100, 162, 0.7)'; //
      ctx.arc(95, 95, 35, 0, Math.PI*2, false);
      ctx.fill();
    }

    结果就是下面这样:


    和上面的代码基本没变化,就是把rgb(r, g, b)变成了rgba(r, g, b, a)而已,a的值也是0~1,0表示完全透明,1则是完全不透明(所以alpha的值实际上是“不透明度”)。

    全局透明度

    上面我们给每一个圆加了0.7的alpha值,不过我们每个圆的alpha都是一样的,每个都写一遍未免有些麻烦(说是我没觉得麻烦……只不过不这么说就没法引出这个新功能啊:)

    ctx.globalAlpha = alpha

    这个参数指定了全局的alpha值,这么设定之后,所有画的图案都会有这么点的透明,除非你又特别指定了。所以把我们的第一个例子稍微改一下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    onload = function() {
      draw();
    };
    function draw() {
      var canvas = document.getElementById('c1');
      if ( ! canvas || ! canvas.getContext ) { return false; }
      var ctx = canvas.getContext('2d');
      ctx.globalAlpha = 0.7;    // 就多了这么一句
      ctx.beginPath();
      ctx.fillStyle = 'rgb(192, 80, 77)';
      ctx.arc(70, 45, 35, 0, Math.PI*2, false);
      ctx.fill();
      ctx.beginPath();
      ctx.fillStyle = 'rgb(155, 187, 89)';
      ctx.arc(45, 95, 35, 0, Math.PI*2, false);
      ctx.fill();
      ctx.beginPath();
      ctx.fillStyle = 'rgb(128, 100, 162)';
      ctx.arc(95, 95, 35, 0, Math.PI*2, false);
      ctx.fill();
    }

    然后我们的结果就和2完全一样了:

    画图多的时候,还是能少打很多字的。

  • 相关阅读:
    c++——if语句
    Hausdorff距离--模板匹配
    牛人(周志华)推荐的人工智能网站
    用VC++实现图像检索技术(转)
    经典的机器学习方面源代码库(非常全,数据挖掘,计算机视觉,模式识别,信息检索相关领域都适用的了)
    2013计算机视觉代码合集四
    2013计算机视觉代码合集三
    2013计算机视觉代码合集二
    2013计算机视觉代码合集一
    [IC]Lithograph(2)光刻技术的分辨率与分辨率增强技术
  • 原文地址:https://www.cnblogs.com/myssh/p/2261902.html
Copyright © 2011-2022 走看看