全屏画布是低分辨率[重复]

Posted

技术标签:

【中文标题】全屏画布是低分辨率[重复]【英文标题】:Full-screen Canvas is low res [duplicate] 【发布时间】:2014-08-31 08:24:02 【问题描述】:

我已经查看了这里的问题并遵循了答案,但我的画布仍然是低分辨率:

CSS:

#canvas 
    position: absolute;
    top: 0;
    left: 0;
    z-index: -1;

JS:初始化画布(页面加载时调用一次,窗口调整大小时调用一次)

function initCanvas() 
    $('#canvas').width($(window).width());
    $('#canvas').height($(window).height());

画线

var c = document.getElementById("canvas");
var ctx = c.getContext("2d");
ctx.moveTo(0,0);
ctx.lineTo(200,100);
ctx.stroke();

结果

JSFiddle

您可以看到该行显示为低分辨率。我想要一个全窗但看起来很锐利的画布。

注意:我将绝对位置和 z-index -1 用于画布,因为我希望它出现在我稍后在页面上添加的任何其他内容的后面。

【问题讨论】:

【参考方案1】:

演示 http://jsfiddle.net/U5XrK/3/

问:我想要一个全窗但看起来很锐利的画布。

答: 将画布的宽度和高度设置为与窗口在画布中的启动时间相同:


代码:
// Draw on canvas
var c = document.getElementById("canvas");
var ctx = c.getContext("2d");
c.width = $(window).width();   // Add this to your code
c.height = $(window).height(); // Add this to your code
ctx.moveTo(0,0);
ctx.lineTo(200,100);
ctx.stroke();


说明:当您使用 CSS 调整生成的图像大小时,画布的原始渲染大小不会受到影响,因此基本上您是在尝试放大较小的图像,这会导致质量较低。如果您的画布在创建时具有预期的大小,则不会出现此缩放问题。

【讨论】:

【参考方案2】:

Canvas consists of a drawable region defined in html code with height and width attributes.

当你给它的 CSS 宽度/高度一个值时——它类似于对一个 IMG 元素做同样的事情——你是在缩放它,而不是设置它的实际尺寸。

因此,您应该为实际尺寸设置画布的 HTML 属性,而不是其 CSS。

【讨论】:

【参考方案3】:

画布有两个单独的宽度/高度值:

元素,通过元素的style 属性或css 调整大小。这些尺寸用于呈现文档中的元素。 画布区域,大小由元素的widthheight 属性决定。这些尺寸用于通过其上下文在画布上绘图。

您正在使用 jQuery 的 width()height() 方法成功调整元素的大小,它们是更改 element.style.widthelement.style.height 的简写。

您所缺少的只是设置画布的区域,这是画布元素的一个属性。你可以使用 jQuery 的 prop() 方法来做到这一点:

$('#canvas').prop(
    width: x,
    height: y
);

或者,如果您想一次性完成所有操作:

var dimensions = 
    width: x,
    height: y
;

$('#canvas').css(dimensions).prop(dimensions);

最后,here is a fiddle

【讨论】:

【参考方案4】:

试试这个

 <canvas id="canvas"  >
</canvas>

我们不能使用 css 设置画布元素的宽度和高度,因为它不会像文档所说的那样正确呈现。你必须设置它的

或者你必须使用

function initCanvas() 
    $('#canvas').attr("width",$(window).width());
   $('#canvas').attr("height",$(window).height());

DEMO

【讨论】:

打败了我。 +1 :) [打自己的脸]【参考方案5】:

你应该使用下面的方法:

var c = document.getElementById("canvas");
c.width = 500;
c.height = 500;
var ctx = c.getContext("2d");
ctx.moveTo(0,0);
ctx.lineTo(200,100);
ctx.stroke();

【讨论】:

您将宽度/高度设置为 500 像素?这不是我要找的。​​span> U 可以改成 c.width = window.innerWidth;c.height = window.innerHeight;

以上是关于全屏画布是低分辨率[重复]的主要内容,如果未能解决你的问题,请参考以下文章

html5 canvas 通用性能提示

HTML画布正在拉伸内容[重复]

网页设计合适的页面尺寸是多少

不同屏幕分辨率的javascript函数[重复]

Pyglet:全屏时如何更改分辨率?

win全屏窗口化动态修改分辨率和获取屏幕支持的所有分辨率