zoukankan      html  css  js  c++  java
  • canvas绘图不清晰的解决方案

    现象描述

      同样大小的图片(60x60px)用canvas和DOM绘制,结果发现canvas的画面质量要差很多。结果如下图所示。

      上图中,左侧红框中的金币采用DOM绘制,右侧和下方的金币和文字等使用canvas绘制,结果canvas绘制的图片模糊不清。

    原因分析

      假设dpr = 2;图片大小为60x60px;对dpr有一定的了解基础。
      1.DOM呈现图片过程
      图片——》浏览器css像素(显示尺寸)——》屏幕实际像素
      60x60              30x30                              60x60
      
      图片像素——》实际像素
      1: 1
       
      2.canvas绘制过程
      图片像素——》canvas像素(画布尺寸)——》css像素(显示尺寸)——》屏幕实际像素
      60x60               30x30                              30x30                          60x60
     
      图片像素——》画布像素——》实际像素
      4:                    1:                  4
       
      也就是说,canvas的绘制过程中图片到画布的过程中进行了像素的抽稀,画布到屏幕像素时又进行了插值,所以造成图片质量下降。
      

    解决方案

      放大画布的尺寸,但是canvas显示尺寸不变;
      图片像素——》canvas像素(画布尺寸)——》css像素(显示尺寸)——》屏幕实际像素
      60x60               60x60                                           30x30            60x60
     
      图片像素——》实际像素
      1:                1 
     
      而canvas的设计的时候正好有对象的属性来分别管理画布尺寸和显示尺寸;canvas的width、height属性用于管理画布尺寸;canvas的style属性中的width、height正好是显示尺寸; 具体可以参考文章http://www.tuicool.com/articles/7V3qeu
      也就是说解决方案就是设置舞台的尺寸和图片像素的尺寸一致,显示尺寸为正常显示尺寸;假设canvas的显示尺寸为窗口宽度,创建canvas的时候指定canvas的width属性为2 * body.clientHeight;style.widht为body.clientHeight + 'px';
      改变后的效果图如下:
  • 相关阅读:
    Python 写一个俄罗斯方块游戏
    您能解决这3个(看似)简单的Python问题吗?
    Python selenium爬虫实现定时任务过程解析
    Python-Django-Ajax进阶2
    Python-Django-Ajax进阶
    Python 数据-入门到进阶开发之路
    Python-Numpy数组计算
    Python-Django-Ajax
    Python-web应用 +HTTP协议 +web框架
    Python-socketserver实现并发- 源码分析
  • 原文地址:https://www.cnblogs.com/wmhuang/p/6477223.html
Copyright © 2011-2022 走看看