【问题标题】:Changing Resolution of HTML Canvas更改 HTML 画布的分辨率
【发布时间】:2016-06-17 02:43:32
【问题描述】:

我正在尝试更改 HTML 画布的分辨率。 (不是宽度和高度)。画布应该保持与屏幕相同的宽度和高度,但渲染分辨率应该是可变的。我可以通过使用浏览器中的缩放功能来复制我想要的东西,但我想知道是否有一种编程方式可以做到这一点。这是我尝试过的:

function resize() {
    screenWidth = mathRound(window.innerWidth);
    screenHeight = mathRound(window.innerHeight);
    calculateUIScale();
    var scaleFillNative = Math.max(screenWidth / maxScreenWidth, screenHeight / maxScreenHeight);
    c.width = screenWidth;
    c.height = screenHeight;
    graph.setTransform(scaleFillNative, 0, 0, scaleFillNative, ((screenWidth - (maxScreenWidth * scaleFillNative)) / 2), ((screenHeight - (maxScreenHeight * scaleFillNative)) / 2));
    graph.imageSmoothingEnabled = false;
    graph.webkitImageSmoothingEnabled = false;
    graph.mozImageSmoothingEnabled = false;
}

这使画布适合屏幕。我想知道您是否可以以某种方式缩放画布元素以模拟不同的分辨率。

我已经尝试过这样做:

c.width = 40;
c.style.width = 400;

但画布现在真的很小。

【问题讨论】:

  • 您可以使用 css 对其进行拉伸或收缩,有时对高清屏幕很有用,但请确保保持纵横比,并且您的所有坐标也会被缩放(例如,如果您使用鼠标事件侦听器)
  • 画布的widthheight 属性定义了画布包含的像素数量。相应的 css-properites 定义画布的尺寸(一旦设置)。如果这两组尺寸不同,则您正在缩放画布上的像素;向下或向上。
  • @Thomas 我试图设置 canvas.width = 40;和 canvas.style.width 400 但这不起作用
  • “没有工作”并不是对你做了什么、你期望什么以及实际发生了什么的非常精确的描述。我不确定,你对“改变画布分辨率”的理解是否和我的一样。除了实现目标的方法之外,您能否解释一下您想要实现的目标。

标签: javascript html css canvas


【解决方案1】:

所有 CSS 尺寸 requires an unit specified if a non-zero value 已给出:

长度值的格式(在此表示为 规范)是(带或不带小数点) 紧随其后的是单位标识符(例如 px、em 等)。后 长度为零,单位标识符是可选的。

所以只需在数字后面添加一个单位,这里将其作为字符串:

c.width = 40;
c.style.width = "400px";  // add pixel unit

或动态:

c.style.width = (c.width * 10) + "px";

var ctx = c.getContext("2d");

c.width = 40;
c.height = 12;
c.style.width = (c.width * 8) + "px";
c.style.height = (c.height * 8) + "px";

ctx.lineWidth = 2;
ctx.strokeRect(0,0,c.width,c.height);
<canvas id=c></canvas>

【讨论】:

    【解决方案2】:

    如果您想缩放页面的整个内容,请尝试将其添加到您的 html 元素的 CSS 中,或者只是整个正文:

    * {
    transform: scale(1.5);
    }
    

    jQuery 也可以:

    $(this).css({
        '-webkit-transform': 'scale(1.5)',
        '-o-transform': 'scale(1.5)',
        '-moz-transform': 'scale(1.5)',
        '-ms-transform': 'scale(1.5)',
        'transform': 'scale(1.5)'
    });
    

    我希望这会有所帮助。

    http://codepen.io/jiemushi/pen/Vjjgaj

    【讨论】:

    • 我不想让游戏的 UI 等改变比例。只是画布。但是我可以使用您在 canvas 元素上发送的代码来获得相同的效果吗?
    • 哎呀,这会降低画布分辨率。您可能希望在增加画布的宽度和高度属性的同时做相反的事情。
    • 画布肯定会变大,但内容也会变大。我建议有一个画布 div 和一个内部 div。放大外部 div 并缩小内部 div。 codepen.io/jiemushi/pen/Vjjgaj
    猜你喜欢
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多