3

我可以通过设置widthheight属性来设置画布的宽度和高度,如下所示:

<canvas id="canvas" width="510" height="510"></canvas>

但我不想硬编码我所有的绘图代码来依赖这些值。我想将“内部”宽度/高度设置为 100x100,然后在这些坐标中绘制所有内容,并让画布将其缩放(就像我在 OpenGL 中所做的那样)。这样,如果我调整我的画布大小,它仍然可以很好地渲染。

我发现如果我在画布上设置 CSS 宽度和高度,我可以使它更大,但保持相同的单位,但我发现它实际上拉伸了结果并且它模糊并且看起来很糟糕(我认为它仍然像矢量,漂亮而清晰)。

有没有办法做到这一点?

4

1 回答 1

4

您可以在“本地”坐标中绘制所有内容,然后作为绘制时做的第一件事,按实际画布的相对大小缩放上下文。

例如

HTML

<canvas id="c" width="510" height="510"></canvas>

JS

var canvas = document.getElementById('c');
var ctx = canvas.getContext('2d');

ctx.scale(5.1,5.1);
// Everything drawn here is in a 100x100 world, 
// but gets scaled to be in the 510x510 canvas
ctx.fillStyle = '#000';
ctx.fillRect(0,0,100,100);
ctx.strokeStyle= '#F00';
ctx.lineWidth = 1;
ctx.strokeRect(5,5,90,90);​​​​​

运行示例

于 2012-06-22T04:47:15.963 回答