canvas 2D画图尺寸的问题的问题?
发布于 6 年前 作者 gzhong 4399 次浏览 来自 问答

按官方类似例子,画一个圆:

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)
			
			// canvas.width = res[0].width
			// canvas.height = res[0].height
			

			//画一个实心圆
			ctx.beginPath();
			ctx.arc(100, 100, 50, 0, 2 * Math.PI, false);
			ctx.fillStyle = "red"; //填充颜色,默认是黑色
			ctx.fill(); //画实心圆
			ctx.closePath();
		})
}

我的问题是:

若将:

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

 替换成:
canvas.width = res[0].width
canvas.height = res[0].height

 绘制结果一模一样,但若将ctx.scale(dpr, dpr)去掉,图像缩小一倍(dpr=2),按说去掉ctx.scale(dpr, dpr)后,只是画布尺寸增大一倍罢了。

 为什么会这样?绘制结果和画布大小还有关系?
3 回复

我觉得,这可能和css中设置的尺寸有关,只是猜测,没有找到文档。

那你canvas.width和height别直接*dpr,直接赋值res[0].width,或者拿屏幕宽高做转换

canvas是用px为单位的,你说的dpr=2并不是绝对的,这和手机屏幕有关,分辨率越高dpr越大。

设备像素比(dpr) = 设备像素(分辨率)/设备独立像素(屏幕尺寸)

回到顶部