zoukankan      html  css  js  c++  java
  • 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().。

  • 相关阅读:
    getline函数
    Java获取某年某月的第一天
    计划任务中使用NT AUTHORITYSYSTEM用户和普通管理员用户有什么差别
    Windows 7系统安装MySQL5.5.21图解
    C#高性能大容量SOCKET并发(十一):编写上传client
    Linux 终端訪问 FTP 及 上传下载 文件
    完毕port(CompletionPort)具体解释
    ping不通的几种可能原因
    Apple Swfit UI控件实现
    js中取session的值
  • 原文地址:https://www.cnblogs.com/niujie/p/7833907.html
Copyright © 2011-2022 走看看