`

[Pro HTML5 Programming] 绘制栅格图 Canvas API

 
阅读更多

1、使用Canvas

        在HTML页面添加<canvas></canvas>标签,然后用javascript控制它。

        javascript控制操作canvas步骤:通过id获取canvas对象以及上下文、在上下文中操作canvas、绘制图像。

 

2、检查浏览器是否支持Canvas

<script>
	try{
		document.createElement('canvas').getContext('2d');
		document.getElementById('support').innerHTML = 'HTML5 Canvas is supported';
	}catch(e){
		document.getElementById('support').innerHTML = 'HTML5 Canvas is unsupported';
	}
</script>

<body>
	<span id='support'></span>
</body>

 

3、Canvas标签

<canvas id="diagonal" style="border:1px solid;" width="200" height="200"></canvas> //带边框的canvas元素 
<canvas width="200" height="200"></canvas> // 无边框的canvas元素 

 可以通过id获取Canvas对象

 

4、通过javascript控制Canvas

    绘制一条直线

<script>
	function drawDiagonal()
	{
		var canvas=document.getElementById('diagonal_line'); //获得canvas对象
		var context=canvas.getContext('2d');  //获取canvas的上下文

		//用绝对坐标来创建一条路径
		context.beginPath();
		context.moveTo(0,0);//将光标左上角(0,0)
		context.lineTo(140,70);//直线路径,移到(140,70)

		//将这条线绘制到canvas上
		context.stroke();  //调用stroke或fill才会绘制
	}

	window.addEventListener("load",drawDiagonal,true);
</script>

<body>
	<canvas id="diagonal" style="border:1px solid;" width="200" height="200"></canvas>
</body>

 

5、绘制一棵小树

<script type="text/javascript">

	function createCanopyPath(context){
		//开始创建路径
		context.beginPath();
		context.moveTo(-25,-50); //移到第一个点
		context.lineTo(-10,-80);  //连接直线
		context.lineTo(-20,-80);
		context.lineTo(-5,-110);
		context.lineTo(-15,-110);
		context.lineTo(0,-140);
		context.lineTo(15,-110);
		context.lineTo(5,-110);
		context.lineTo(20,-80);
		context.lineTo(10,-80);
		context.lineTo(25,-50);
		context.closePath();  //将最后一个点与起始点相连
	}

	function drawTrails(){
		//获取canvas对象
		var canvas=document.getElementById('diagonal');
		var context=canvas.getContext('2d');
		
		//保存上下文,通过restore可得到保存的状态
		context.save();

		//将上下文平移到(130,250)
		context.translate(130,250);

		//创建路径
		createCanopyPath(context);

		//设置描边信息
		context.lineWidth=4; //加宽线条
		context.lineJoin='round'; //平滑连点
		context.strokeStyle='#663300'; //颜色设置成棕色
		context.stroke();  //画边
		
		//设置填充信息
		context.fillStyle='#339900';  //填充颜色
		context.fill();  //用颜色填充

		
		//使用渐变方式填充
		var trunkGradient=context.createLinearGradient(-5,-50,5,50); //创建水平渐变对象
		trunkGradient.addColorStop(0,'#663300');  //这只渐变颜色
		trunkGradient.addColorStop(0.4,'#996600');
		trunkGradient.addColorStop(1,'#552200');
		context.fillStyle=trunkGradient;  //填充方式为渐变填充
		context.fillRect(-5,-50,10,50);  //用渐变填充矩形

		var canopyShadow=context.createLinearGradient(0,-50,0,0);  //创建垂直渐变对象
		canopyShadow.addColorStop(0,'rgba(0,0,0,0.5)');  //0位置的渐变色是50%透明的黑色
		canopyShadow.addColorStop(0.2,'rgba(0,0,0,0)');  //0.2位置是黑色
		context.fillStyle=canopyShadow;  //填充方式为渐变填充
		context.fillRect(-5,-50,10,50);
		
		//恢复上下文的状态
		context.restore();

		context.save();
		context.translate(-10,350);

		//画曲线
		context.beginPath();
		context.moveTo(0,0);
		context.quadraticCurveTo(170,-50,260,-190);
		context.quadraticCurveTo(310,-250,410,-250);

		//用图片填充,createPattern返回一个CanvasPattern 对象,该对象表示一个贴图图像所定义的模式。可用作stokeStyle或fillStyle 属性的值。
		context.strokeStyle=context.createPattern(gravel,'repeat');

		context.lineWidth=20;
		context.stroke();
		context.restore();
    }
			
	var gravel=new Image();
     gravel.src="gravel.jpg";   
	//图片加载完成后,将其显示在canvas上.				
    gravel.onload=function(){
        drawTrails();
    } 
	
 window.addEventListener("load",drawTrails,true);
</script>

<body>
    <canvas id="diagonal" style="border:1px solid;" width="500" height="500"></canvas>
</body>
        

 效果为:

 

6、改进小树

<script type="text/javascript">

	function createCanopyPath(context){
		//开始创建路径
		context.beginPath();
		context.moveTo(-25,-50); //移到第一个点
		context.lineTo(-10,-80);  //连接直线
		context.lineTo(-20,-80);
		context.lineTo(-5,-110);
		context.lineTo(-15,-110);
		context.lineTo(0,-140);
		context.lineTo(15,-110);
		context.lineTo(5,-110);
		context.lineTo(20,-80);
		context.lineTo(10,-80);
		context.lineTo(25,-50);
		context.closePath();  //将最后一个点与起始点相连
	}

	function drawTrails(){
		//获取canvas对象
		var canvas=document.getElementById('diagonal');
		var context=canvas.getContext('2d');
		
		context.save();   
        context.translate(-10,350);   
  
        //画曲线   
        context.beginPath();   
        context.moveTo(0,0);   
        context.quadraticCurveTo(170,-50,260,-190);   
        context.quadraticCurveTo(310,-250,410,-250);   
        context.strokeStyle=context.createPattern(gravel,'repeat');   
        context.lineWidth=20;   
        context.stroke();   
        context.restore();   
		
		//绘制第一棵树
		context.save();
		context.translate(100,250);
		drawTree(context);
		context.restore();
		
		//绘制第二棵树
		context.save();
		context.translate(320,450);
		context.scale(2,2);  //放大两倍
		drawTree(context);
		context.restore();
		
		//绘制第三棵树,倒了
		context.save();
		context.translate(150,400);
		context.scale(1.5,1);
		context.rotate(1.57);
		drawTree(context);
		context.restore();
		
		drawText(context,'Happy Trails!');
    }
	
	function drawTree(context){
		//使用渐变方式填充
		var trunkGradient=context.createLinearGradient(-5,-50,5,50); //创建水平渐变对象
		trunkGradient.addColorStop(0,'#663300');  //这只渐变颜色
		trunkGradient.addColorStop(0.4,'#996600');
		trunkGradient.addColorStop(1,'#552200');
		context.fillStyle=trunkGradient;  //填充方式为渐变填充
		context.fillRect(-5,-50,10,50);  //用渐变填充矩形

		var canopyShadow=context.createLinearGradient(0,-50,0,0);  //创建垂直渐变对象
		canopyShadow.addColorStop(0,'rgba(0,0,0,0.5)');  //0位置的渐变色是50%透明的黑色
		canopyShadow.addColorStop(0.2,'rgba(0,0,0,0)');  //0.2位置是黑色
		context.fillStyle=canopyShadow;  //填充方式为渐变填充
		context.fillRect(-5,-50,10,50);
		
		//创建路径
		createCanopyPath(context);
		
		//设置描边信息
		context.lineWidth=4; //加宽线条
		context.lineJoin='round'; //平滑连点
		context.strokeStyle='#663300'; //颜色设置成棕色
		context.stroke();  //画边
		
		//设置填充信息
		context.fillStyle='#339900';  //填充颜色
		context.fill();  //用颜色填充
		
		//设置阴影
		context.save();
		context.transform(1,0,-0.5,1,0,0); //借助拉伸变换,产生倾斜
		context.scale(1,0.6);  //高度为60%
		context.fillStyle='rgba(0,0,0,0.2)';  //透明度为20%
		context.fillRect(-5,-50,10,50);
		createCanopyPath(context);
		context.fill();
		context.restore();
	}
	
	function drawText(context,text){
		context.save();
		//指定字体大小,并且指定字体库
		context.font="60px impact";
		context.fillStyle='#996600';
		context.textAlign='center';
		//添加字体的阴影
		context.shadowColor='rgba(0,0,0,0.2)';
		context.shadowOffsetX=15;
		context.shadowOffsetY=-10;
		context.shadowBlur=2;

		//The fillText method takes four parameters (text,x,y,maxWidth).
		context.fillText(text,200,60,400);
		context.restore();
	}
			
	var gravel=new Image();
     gravel.src="gravel.jpg";   
	//图片加载完成后,将其显示在canvas上.				
    gravel.onload=function(){
        drawTrails();
    } 
	
	
 window.addEventListener("load",drawTrails,true);
</script>

<body>
    <canvas id="diagonal" style="border:1px solid;" width="500" height="500"></canvas>
</body>
        

 

 
 

 

  • 大小: 37.3 KB
  • 大小: 52.1 KB
分享到:
评论

相关推荐

    matlab栅格地图绘制

    在MATLAB中,绘制栅格地图是一项常见的任务,特别是在地理信息系统(GIS)、遥感或数据分析等领域。栅格地图是一种用二维数组表示地理空间数据的方法,每个数组元素代表地图上的一个特定区域或像素。在提供的描述中,...

    MATLAB绘制栅格图

    MATLAB绘制栅格图。模拟室内环境地图,用于机器人定位和路径规划

    MATLABB_matlab栅格地图_障碍物_matlabb-*_MATLAB直线栅格_栅格数据_

    MATLAB绘制栅格化地图%创建具有障碍物的栅格地图%矩阵中0代表黑色栅格a = ones(20);a(33:7)=0;a(3:107)=0;a(103:7)=0;a(1713:17)=0;a(10:1713)=0;a(1013:17)=0;a(1415)=0;b = a;%disp(a(endend));b(end+1end+1) = 0;...

    蚁群算法在栅格地图上的最短距离 MATLAB.rar_matlab 栅格地图_栅格地图_栅格蚁群_栅格蚁群算法_栅格路径规划

    5. 可视化结果:在MATLAB中,可以利用图像函数绘制出最优路径,以直观展示算法的运行效果。 在实际应用中,MATLAB提供了一套强大的数值计算和图形处理工具,便于我们快速实现和调试算法。通过不断调整参数和优化...

    Html5 Canvas.docx

    HTML5 Canvas是Web开发中的一个重要组成部分,它允许开发者在网页上动态绘制图形,提供了一种强大的矢量图形绘制能力。这个技术尤其适用于游戏、数据可视化、图表制作等场景。以下是对HTML5 Canvas基本用法的详细...

    栅格绘制与坐标系可以在对话框中显示

    在C++中,实现栅格绘制可能涉及到Windows API或者图形库,如OpenGL、SDL或Qt等,但根据描述,这个程序是基于对话框的,所以很可能使用了Windows API,因为它提供了与对话框直接交互的函数。 坐标系在图形绘制中扮演...

    Leaflet.canvasdraw:在 2d 画布层上绘图(用于栅格)

    Leaflet.canvasdraw是一个增强Leaflet地图功能的JavaScript插件,它利用HTML5的Canvas技术在2D画布层上直接绘制栅格数据,为开发者提供了一种高效、灵活的方式来展示和交互地图数据。对于需要处理大量地图数据的项目...

    HTML5 Canvas API中drawImage()方法的使用实例

    HTML5 Canvas API中的drawImage()方法是用于在画布上绘制图像的重要函数,它支持三种不同的用法,分别对应不同的需求。以下是对drawImage()方法的详细解释: 1. **基本形式**: ```javascript context.drawImage...

    世界地图遥感栅格图

    【世界地图遥感栅格图】是一个集合了地理信息系统(GIS)和遥感技术的数据集,主要用于地理分析和研究。遥感技术是通过非接触方式从远处获取地球表面信息的科学,而栅格数据结构则是遥感图像的一种常见表示形式,它...

    设置栅格数据指定栅格值的颜色

    要实现这一功能,首先我们需要了解SuperMap iObject Java API,这是一个用于开发GIS应用程序的强大工具,提供了对栅格数据处理的各种接口和类。在Java环境中,可以使用`IRasterStyle`接口和`IColorTable`类来操作...

    SuperMap iObject .Net 7C获取栅格数据在指定范围内的栅格值并绘制直方图

    文件`RasterHistogram.doc`可能包含了上述过程的详细步骤和代码示例,而`Data`文件夹可能包含了示例数据,`RasterHistogram`可能是生成的直方图图片或者是一个用于展示如何实现此功能的代码文件。 总之,SuperMap ...

    C++例程(栅格)_C++_栅格路径规划_

    5. 终止条件:当目标节点被处理或队列为空时,搜索结束。 在压缩包中的"C++例程(栅格)"文件中,你可能会找到以下代码部分: - 数据结构:定义栅格类,用于存储和操作格子信息。 - A*算法的实现:包含搜索逻辑、启发...

    栅格法建立地图环境

    ### 栅格法建立地图环境 #### 一、栅格地图简介 栅格地图是一种将地理空间划分为一系列矩形网格或像素的地图表示方法。在计算机科学和地理信息系统(GIS)领域,栅格地图被广泛应用于环境建模、路径规划、机器人...

    栅格地图源代码.rar_matlab_matlab栅格_地图栅格开发_路径规划_路径规划matlab

    MATLAB创建栅格地图源码,用于路径规划方面的地图创建

    arcgis 配准栅格图形

    ArcGIS 配准栅格图形知识点 ArcGIS 配准栅格图形是 ArcGIS 中的一种重要功能,主要用于对栅格图像的配准和矢量化。下面是 ArcGIS 配准栅格图形的知识点: 1. 什么是 ArcGIS 配准栅格图形? ArcGIS 配准栅格图形...

    栅格地图切图工具及栅格图片转换工具使用说明文档.pdf )

    ### 栅格地图切图工具及栅格图片转换工具使用说明 #### 一、概述 本文档旨在详细介绍栅格地图切图工具以及栅格图片转换工具的使用方法,特别是针对PGIS平台栅格地图生成工具及其相关的转换工具,如转换为ArcGIS...

    cartographer栅格地图保存

    在Cartographer中,构建的栅格地图对于机器人在环境中的移动至关重要。而地图的保存和加载能力则是系统可扩展性和复用性的重要保障。本篇文章将详细介绍如何像使用gmapping那样保存Cartographer生成的2D栅格地图,并...

    用MapInfo对栅格地图进行配准

    在这个阶段,需要将栅格地图转换为矢量图,提取出各个图层。然后,使用MapBasic语言来编程,实现栅格地图的矢量化。 在MapInfo中,栅格图像是由一行行细小的点(称作像素)组成,也可以称之为位图。栅格图像可以...

Global site tag (gtag.js) - Google Analytics