收藏
回答

画布canvas组件官方示例为什么要乘以设备像素比?

canvas组件下,有一段示例代码,如下:

<!-- canvas.wxml -->
<canvas type="2d" id="myCanvas"></canvas>
// canvas.js
Page({
  onReady() {
    const query = wx.createSelectorQuery()
    query.select('#myCanvas')
      .fields({ node: true, size: true })
      .exec((res) => {
        const canvas = res[0].node
        const ctx = canvas.getContext('2d')

        const dpr = wx.getSystemInfoSync().pixelRatio
        canvas.width = res[0].width * dpr
        canvas.height = res[0].height * dpr
        ctx.scale(dpr, dpr)

        ctx.fillRect(0, 0, 100, 100)
      })
  }
})


不太理解长宽为什么要乘以dpr,并且画布缩放同样的倍数。我把这些去掉后预览看起来和上面一样:

canvas.width = res[0].width
canvas.height = res[0].height
// ctx.scale(dpr, dpr)
回答关注问题邀请回答
收藏

4 个回答

  • 就是你啊
    就是你啊
    2022-03-18

    因为小程序里的canvas设置尺寸只能用style设置宽高 但是这种方法设置canvas会导致画布和画板尺寸不一样 显示会变形 所以要用canvas.width这种方式设置成和style里的尺寸一样 又因为 设备像素比=物理像素 除以 独立像素(css) 所以设置的物理像素就是:物理像素=设备像素比 * 独立像素(css)

    2022-03-18
    有用 1
    回复
  • 赵然
    赵然
    2020-09-24

    我也不太理解,之后我图片和文字加上的时候就变形了

    2020-09-24
    有用
    回复
  • AILUG
    AILUG
    2020-03-23

    同问 你用drawImage试试 加不加完全是两种效果

    2020-03-23
    有用
    回复
  • phoenixor
    phoenixor
    2020-03-11

    不可能一样,显示会变形

    2020-03-11
    有用
    回复
登录 后发表内容
问题标签