很久没写博客了,今年过年的时候,家里出了意外,现在心里依然很难受。6月份之前一直忙着写毕业论文,答辩完6月初回公司继续上班,今天刚好周末有空,就写下之前碰到一个问题。

做一个图像查看器(基于Chrome浏览器),可以旋转缩放,在一位同事的代码的基础上进行修改,因为同事使用了html5中的canvas,不过他那边最大放大倍数只有3倍,而我这边最大放大倍数为8倍,这样,问题就出现了,测试人员A把某一张图像放大到第8倍的时候,图像突然不见了,而她说在另外一个测试人员B的电脑上测试则不会出现图像消失,我猜想会不会是浏览器版本不同的原因,因为在我这边不会出现这个问题,我的浏览器版本是26....,而测试人员A的浏览器版本是28...。我在开发人员C的浏览器上进行测试,他的版本也是28....,他的也不会出现消失的情况,然后去了组长的浏览器测试,他的浏览器版本跟我一样是26...,组长的也出现图像消失,这样排除了浏览器版本产生的原因。后来,我在测试人员A的浏览器用比较小的图像测试,不会出现消失,在我的浏览器上用一张很大的图像,大于1440X900,放大到第八倍,也没有出现消失,想到做下压力测试,放大个20倍试试,还不会消失,再试试60倍,图像消失了。从这里可以看出,图像大小及放大倍数与图像消失是有关系的。

我们的电脑的硬件配置是一样的,所以暂时想不出什么原因,在网上搜索canvas画图的相关资料,看到有些说用GPU加速canvas的,后来发现Chrome也有支持硬件加速画布的选项,因为学过GPU加速,CUDA编程,知道有时候使用GPU加速反而慢了,因为数据传输带宽存在瓶颈,大家的显卡都用Intel的集成GPU(测试人员A的另一个电脑使用带NVidia
GPU芯片的独立显卡,不会出现消失的情况,而且速度很快),然后在stackoverflow上找到一个评论,说在Chrome GPU设置上把支持硬件加速画布停用,就可以,尝试后,发现之前出现图像消失的浏览器确实不会再出现图像消失了,(可以看出硬件加速不一定就快了)。但是现在还是不懂的是,为什么大家的硬件配置一样,浏览器的设置一样,为什么有些会消失,有些不会,本来想继续测试,看到底是哪部分不同,之前用GPU-Z.0.7.2查看了显卡的信息,及使用情况,没有区别,现在猜想可能是由于在canvas画图的时候,数据还没有传到GPU端,所以就没画出来。

虽然在浏览器上进行设置解决了图像消失的问题,但是组长觉得设置浏览器的方式不太好,所以最后另一位同事采用CSS3写了图像的旋转与缩放,不会出现消失的问题,代码相对也简洁很多,而且即使放到100倍也没问题。

html5 canvas画不出图像的原因的更多相关文章

  1. CSS3进度条 和 HTML5 Canvas画圆环

    看到一些高大上的进度条插件,然后想自己用CSS写.经过搜索资料之后,终于成功了.为了以后方便拿来用,或者复习.将代码贴出. HTML代码: 只需要两个div,外面的为一个有border的div id为 ...

  2. 基于HTML5 Canvas 实现弹出框

    用户鼠标移入时,有弹出框出现,这样的需求很常见.这在处理HTML元素实现时简单,但是如果是对HTML5 Canvas 构成的图形进行处理,这种方法不再适用,因为Canvas使用的是另外一套机制,无论在 ...

  3. HTML5 Canvas 画虚线组件

    前段时间由于项目需要,用到了HTML5 Canvas画图,但是没有画虚线的方法,自己写了一个HTML5 画虚线的组件. dashedLine.js if (window.CanvasRendering ...

  4. HTML5 Canvas 画钟表

    画钟表是2D画图的老生常谈,我也不能免俗弄了一个.代码如下: <!DOCTYPE html> <html lang="utf-8"> <meta ht ...

  5. html5 canvas画饼

    1. [图片] lxdpie.jpg ​2. [文件] lqdpie.html ~ 801B     下载(7) <!DOCTYPE HTML PUBLIC "-//W3C//DTD ...

  6. html5 canvas画云

    使用函数画出天空的云层图像: y 主要使用到的是数学的圆与弧度之间转换关系: 代码如下 //div对象 var parentContainer = document.getElementById(&q ...

  7. html5 canvas画流程图

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  8. HTML5 Canvas画数字时钟

    先不说废话,没代码算个蛋. 一些地方注释都写得比较清楚,不过这只是部分,因为只有秒针,但是时针,分针的逻辑都是一致的. 代码中有些坐标不知道为什么较不准,看看就好

  9. html5 canvas画进度条

    这个ie8的兼容是个问题,ie8 的innerHTML有问题啊,添加两个附件吧 <!DOCTYPE html> <html> <head> <meta cha ...

随机推荐

  1. 动态linq to list排序

    public class QeurySort { public static IList<T> Sort<T>(IList<T> list,string sidx, ...

  2. 配置管理服务diamond和disconf横向对比

    Diamond则是淘宝开源的一种分布式配置管理服务的实现 disconf是来自百度的分布式配置管理平台,包括百度.滴滴出行.银联.网易.拉勾网.苏宁易购.顺丰科技 等知名互联网公司正在使用! 对比项目 ...

  3. php中urldecode()和urlencode()

    urlencode()函数原理就是首先把中文字符转换为十六进制,然后在每个字符前面加一个标识符%.urldecode()函数与urlencode()函数原理相反,用于解码已编码的 URL 字符串,其原 ...

  4. socket listen参数中的backlog 的意义!

    服务器监听时,在每次处理一个客户端的连接时是需要一定时间的,这个时间非常的短(也许只有1ms 或者还不到),但这个时间还是存在的.而这个backlog 存在的意义就是:在这段时间里面除了第一个连接请求 ...

  5. Django 之 查看执行的sql语句

    前提: 我的app名称为core,models.py内容如下: # coding:utf-8 from django.db import models # Create your models her ...

  6. 【HOW】用PowerShell脚本修改用户配置文件属性显示次序

    首先将如下脚本保存为PowerShell文件,如:ReorderUserProfileProperty.ps1. 在执行此脚本时,如果不输入任何参数,将列出所有用户配置文件属性的名称和显示次序:如果只 ...

  7. 在 Hibernate 中出现 database product name cannot be null 时怎么解决?

    今 天在做一个SH项目结合的时候忽然出现了,这样的错误,我开始也不知道怎么办,便上网查,看一些高手回答都是说,检查 hibernate.cfg.xml 这个配置文件,或是一些其它的配置,于是我便看了一 ...

  8. C++设计模式-State状态模式

    State状态模式作用:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. UML图如下: State类,抽象状态类,定义一个接口以封装与Context的一个特定状态相关的行为. ...

  9. 关于reset.css的疑问:为什么一定要重置浏览器样式?

    自开始做前端算起,我所做过的每一个项目中都会有一个reset.css,也就是重置样式表.我现在想想都不知道第一次是从哪儿弄来的一个重置样式表.快五年了,好像从来都没有质疑过关于重置样式表的内容. 这样 ...

  10. Java多线程Thread

    转自:http://www.cnblogs.com/lwbqqyumidi/p/3804883.html Java总结篇系列:Java多线程(一)   多线程作为Java中很重要的一个知识点,在此还是 ...