HTML5中Canvas绘图方法性能测试

 

      canvas中绘图的方法无非三样:绘制矢量图,drawImage,putImageData。在做战棋游戏时,效果主要用图片实现,所以主要是评测drawImage,putImageData两个方法的效能。

 

    测试中主要设置如下几个技术指标 : 刷新频率i,  图片大小w,h, 绘制图片个数n,  FF占CPU比cpu, 图层数量layers

 

采用drawImage方法:

1. 刷新频率i = 20, 图片个数n=255,  w=h=15,  cpu=28+%

2. n = 100, i =200, w=h =48, cpu = 5%  

3. n = 100, i =20, w=h =48,  每次刷新clearRect整个画布,cpu=50+%

4. n = 100, i =20, w=h =48,  每次clearRect之前把画布隐藏hide,绘好所有图片后显示画布show, cpu = 50+%

5. n = 100, i =125, w=h =48, clearRect, 添加100个div层悬浮在canvas上,设置背景色, cpu=13%

6. n = 1, i =20, w=h=225, cpu = 15~20% 每次只绘一张大图,格式为png

7. n = 100, i =125, w=h =48, clearRect 每次绘一张较大图的一部分,宽高为48 cput = 18%

8. n = 200, i =125, w=h =48, clearRect 每次绘大小仅为48的图片,格式为png cput = 14%

9. n = 225, i =20, cpu = 28%, w=h=15 绘制png  cpu=38%

10. n = 225, i =20, cpu = 28%, w=h=15 绘制bmp cpu=25%

11. n = 225, i =20, w=h=15,   生成n个浮动折叠在一起的canvas,每个画布上只画一张图片,cpu = 50+%

 

 

采用putImageData方法:

1. 刷新频率i = 20, 图片个数n=255,  w=h=15,  cpu=8%

2. n = 400, i =20, w=h =20, cpu = 28%  

3. n = 900, i =20, w=h =30, cpu = 50+%  

4. n = 225, i =20, w=h = 15, layers =5,  生成5个浮动折叠在一起的canvas,cpu = 30%

5. n=255, i = 20, w=h=15,  图片类型为bmp cpu=8%

6. n=255, i = 20, w=h=15,   每次更新时clearRect, cpu=25%

7. n = 255, i =20, w=h =15,  每次clearRect之前把画布隐藏hide,绘好所有图片后显示画布show, cpu = 25%

 

 

经过一系列的测试发现对效率影响如下:

a. 影响最大的为刷新频率,这也是显而易见。

b. putImageData比drawImage效率高很多。putImageData是把一块区域的像素集直接放到画布上,会替换到画布原有图像,但是效率极高。 

c. 每次更新时clearRect会很耗资源,但把ff缩小时,消耗就很少了,clearRect主要是耗显卡导致cpu上升了。最好能区域更新

d. 多个画布叠加时,即使每个画布工作量很少,叠加数量在3个以上时,cpu占用率就会大幅提升,估计是在浏览器处理时还是需要做canvas的像素操作。

e. 在canvas上放有背景色的div层,对效率影响不大,就是说如果有可能就用静态HTML做

f.  画同样数量的Image时,虽然画出的尺寸一样大,但是图片较小的占用资源较少

g. drawImage时,画bmp要比png占用cpu小很多,不需要考虑透明度。

h. putImageData时,bmp和png占用内存基本一样多。

i.  putImageData时,隐藏与显示画布占用资源基本一样多。

 

 

所以,对SLG引擎做了如下更改:

  • 针对频率优化游戏底层设计,将显示与控制层分离,控制和状态都是实时响应,显示层则改为一秒16帧,同时提供20ms就刷新的高实时响应的绘画情况。
  • 加载完图片后,通过一个隐藏的canvas将图片切割为数个小图片,每个图片对应角色的一个动作。绘图时绘小图片。
  • 将原先的分层多canvas的结构取消,保留层的概念,但是只有一个canvas,层只是绘制的先后顺序不同
  • 区域更新。只更新当前屏幕所展示区域。

做了上述更改后,CPU占用率从原先的50+%降为10%,在web端实现SLG引擎还是可能的。

 

 

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: HTML5 Canvas是一种用于绘制图形的Web API,可以用它来绘制各种形状、线条、文本和图像等。要绘制一个logo,可以先设计好logo的样式和颜色,然后使用Canvas API来实现。具体步骤包括:创建Canvas元素,设置Canvas的宽度和高度,获取Canvas的上下文对象,使用上下文对象绘制各种形状和文本,最后将Canvas元素插入到HTML页面即可。绘制logo需要一定的设计和技术能力,需要不断尝试和调整才能得到满意的效果。 ### 回答2: Html5 Canvas是一项很有意思的技术,通过调用canvas的API来进行拉近、缩小、旋转、平移、变形等各种绘图效果的创作操作。在本次绘制Logo的任务,我们需要通过这种技术来完成一个漂亮的Logo,下面就以一个实际绘制的案例来详解一下。 首先,我们可以在html创建一个canvas标签,显示一个画布。“canvas”是HTML5新加入的标签,用于绘制2D或3D图形,只需要在标签定义画布的大小和高度等属性,就可以在上面自由的绘制。 接下来我们需要引用一些javascript库,比如jQuery、Snap.svg等。这些库可以简化我们的开发流程,并且提供了一些强大的绘图工具。 在绘制方面,我们需要将画布分为三个部分:央部分、左侧部分和右侧部分。首先,在央部分,我们需要绘制一个圆形,通过canvas提供的api,使用arc函数来绘制圆形,可以根据需要设置圆形的大小、颜色和边框等属性。接下来是左侧部分和右侧部分,我们需要绘制一些简单的线条和多边形图形,可以使用css或SVG实现。 最后,我们需要将这些位置合并在一起,达到最终的效果。通过CSS调整位置和字体,添加一些特殊的过渡效果和动画效果,实现一个独具风格的Logo设计。 绘制Logo时需要注意的是,在设计,最好保留一定的空间留给用户进行绘图,比如将背景色设为白色或浅色。同时,也要考虑不同设备的屏幕分辨率和绘图的效果,确保Logo在不同设备上的显示效果都一致。此外,我们还可以增加一些特效,比如模糊、阴影、渐变和光影等,来营造出更加绚丽的视觉效果。 综上所述,html5 canvas绘图是一项多方面都需要考虑的技术,需要在技术、设计和用户体验等方面多方面的关注。只有在各个方面都考虑到位,才能达到最佳的绘图效果和用户体验。 ### 回答3: HTML5Canvas画布让网页设计者可以绘制出非常酷炫的图形,它提供了许多绘制路径、多种颜色和文本等功能。在Canvas,最常见的是用来绘制各种形状的路径。除此之外,还可以使用图像和聚光灯效果创建各种动画效果,甚至可以在Canvas上面添加音频和视频元素。 绘制logo可以说是Canvas的重头戏,在这里,我们简单介绍几个Canvas绘制logo的方法。 一、使用图像绘制 如果你已经有了一个已经设计好的logo图像,你可以在Canvas上绘制这个图像。这是相对简单的方法,只需调用Canvas的drawImage()方法即可实现,在绘制成功后,可以对这个Canvas绘制的图像进行一些变换。 二、使用路径和填充绘制 如果你需要绘制一个比较复杂的图形,最好的选择就是使用路径和填充绘制。Canvas提供了一系列的绘制路径方法,可以绘制各种形状。通过路径和填充,你可以创建出一个虚实交错的图形,给人留下深刻的印象。 三、使用动画绘制 如果你想让你的Logo充满动态感,就可以使用Canvas的动画API,通过逐帧更新Canvas,使图形产生连续的动画效果。这个方法可以让你的Logo动感十足,让观众很难动过目不忘。 总结:在HTML5 Canvas画布上绘制Logo图案可以使用图像绘制、路径填充绘制和动画绘制这三种方式。如果你足够熟练的话,可以使用这三种方式组合起来,打造一款炫酷的Logo。无论是什么方法,实现漂亮的Logo都需要你有耐心和创造性,只有不断尝试,加强练习,才能创造出让人印象深刻的Logo。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值