博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTML5中的Canvas(颜色)【转载】
阅读量:4613 次
发布时间:2019-06-09

本文共 2452 字,大约阅读时间需要 8 分钟。

原文:

这一次讲解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完全一样了:

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

转载于:https://www.cnblogs.com/myssh/archive/2011/11/24/2261902.html

你可能感兴趣的文章
HDU 5835 Danganronpa(弹丸论破)
查看>>
Blender快捷键设置
查看>>
Mathematica数据处理(7)--散点图(下)
查看>>
TCP三路握手
查看>>
jsp+servlet+javabean
查看>>
PHP字符串
查看>>
手机端调试
查看>>
BZOJ 2141 排队 (三维偏序CDQ+树状数组)
查看>>
Window Server 2012 R2 没有照片查看器 打开图片都是画板问题怎么解决
查看>>
顶级c程序员之路 选学篇-1 深入理解字节,字节序与字节对齐
查看>>
2.node基础知识笔记
查看>>
shell 命令用法
查看>>
openssl实现自签名证书
查看>>
结构体学习笔记4——结构体成员赋值
查看>>
requests库的文档--快速上手
查看>>
nsinteger 与 int 区别
查看>>
访问者模式-Visitor
查看>>
公众号第三方平台开发 教程一 创建公众号第三方平台
查看>>
安装ANDROID5.0 ,adb连接不上
查看>>
在MFC中使用按下按钮出现选择文件对话框,选中一个指定文件,并将其地址显示到指定的编辑框中...
查看>>