canvas入门

Posted 苜葉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了canvas入门相关的知识,希望对你有一定的参考价值。

canvas一样可以使用图形变换。

位移,translate(x, y);

旋转:rotate(deg);

缩放:scale(sx,sy);

但这个过程有个陷阱,如

    canvas.width = 800;
    canvas.height = 800;

    cxt.fillStyle = \'red\';
    cxt.translate(100, 100);
    cxt.fillRect(0,0,400,400);

    cxt.fillStyle = "green";
    cxt.translate(300, 300);
    cxt.fillRect(0,0,400,400);

效果如下:

可以发现,translate的数据叠加了。所以在绘制过程中应该使用save()和restore()。在使用了图形的变换时,都应该使用这两个函数,保证变换的数据的纯粹。

        canvas.width = 800;
	canvas.height = 800;

	cxt.save();
	cxt.fillStyle = \'red\';
	cxt.translate(100, 100);
	cxt.fillRect(0,0,400,400);
	cxt.restore();

	cxt.save();
	cxt.fillStyle = "green";
	cxt.translate(300, 300);
	cxt.fillRect(0,0,400,400);
	cxt.restore();

  效果回复正常。

 rotate(deg)方法旋转当前视图。参数表示旋转的量,用弧度表示。正值表示顺时针方向旋转,负值表示逆时针方向旋转。

注意:先位移后旋转和先旋转后位移的结果是不一样的,默认旋转是以左上角为原点,当先位移后已经改变了默认的原点。

scale(sx,sy)方法缩放当前视图。参数表示在x轴和y轴进行的缩放。

     cxt.lineWidth = 5;

	cxt.save();
	cxt.scale(1,1);
	cxt.strokeRect(50, 50, 200, 200);
	cxt.restore();

	cxt.save();
	cxt.scale(2,2);
	cxt.strokeRect(50, 50, 200, 200);
	cxt.restore();

	cxt.save();
	cxt.scale(3,3);
	cxt.strokeRect(50, 50, 200, 200);
	cxt.restore();

  上面代码所绘制的四边形在没缩放时长宽一样,边框大小一样,缩放后效果如图;

可以看出左上角的坐标同样进行了缩放,图像的其他属性如线条的宽度一样进行了缩放。

还有一个函数 transform() 通过设置矩阵可以进行全方位的变换。

setTransform()函数将当前转换重置为单位矩阵。然后运行transform().。

 

以上是关于canvas入门的主要内容,如果未能解决你的问题,请参考以下文章

HarmonyOS鸿蒙学习笔记(16)Canvas入门使用

canvas入门

自己定义View时,用到Paint Canvas的一些温故,简单的帧动画(动画一 ,"掏粪男孩Gif"顺便再提提onWindowFocusChanged)(代码片段

canvas入门,一篇博文带你学会用代码绘画,直击实战案例!

canvas入门,一篇博文带你学会用代码绘画,直击实战案例!

推荐net开发cad入门阅读代码片段