Gwt 如何获得画布的宽度/高度?

Gwt 如何获得画布的宽度/高度?,gwt,Gwt,我想在我的html页面上有一个画布,宽度=100%。然后我想在运行时获得画布的宽度(以像素为单位)。比如: Canvas c = Canvas.createIfSupported(); c.setWidth("100%"); c.setHeight("100%"); // let's draw a rectangle to fill the whole canvas: c.getContext2d().rect(0, 0, ?, ?); // <-- what's its actual

我想在我的html页面上有一个画布,宽度=100%。然后我想在运行时获得画布的宽度(以像素为单位)。比如:

Canvas c = Canvas.createIfSupported();
c.setWidth("100%");
c.setHeight("100%");

// let's draw a rectangle to fill the whole canvas:
c.getContext2d().rect(0, 0, ?, ?); // <-- what's its actual width/height?
Canvas c=Canvas.createIfSupported();
c、 设置宽度(“100%”);
c、 设定高度(“100%”);
//让我们画一个矩形来填充整个画布:

c、 getContext2d().rect(0,0,,?);// 使用画布宽度和高度方法

var width = c.width;
var height = c.height;
这是(令人惊讶的)

c.getContext2d().rect(0,0299149);
。。。无论画布的实际像素大小如何。原因是,300x150是默认的坐标空间大小,请参见

您可以使用
canvas.setCoordinateSpaceWidth()
canvas.setCoordinateSpaceHeight()
将其更改为所需的任何内容

通常,人们希望独立于画布的实际大小进行绘制,因此他们只需将坐标空间设置为100x100,绘制的图像就会自动缩放

但是,您可能需要了解实际画布像素大小:

Scheduler.get().scheduledederferred(新的ScheduledCommand()){
@凌驾
public void execute(){
final int clientWidth=canvas.getElement().getClientWidth();
final int-clientHeight=canvas.getElement().getClientHeight();
setupCoordinateSpace(画布、客户端宽度、客户端重量);
drawMyImage(画布);
}
});
请注意,这必须在
schedulederferred
中完成,因为只有在浏览器有机会执行布局后才能知道客户端大小

您可以使用此信息调整纵横比以匹配画布(我建议这样做,否则您会得到扭曲的图像)

void setupCoordinateSpace(画布、int clientWidth、int clientHeight){
最终双宽=(双)clientWidth/(双)clientHeight;
canvas.setCoordinateSpaceHeight(
(int)(坐标宽度/纵横比);
}
或者,您也可以设置坐标空间以匹配像素大小,以便在HTML5画布上执行像素精确绘制:

void setupCoordinateSpace(画布、int clientWidth、int clientHeight){
canvas.setCoordinateSpaceWidth(clientWidth);
canvas.setCoordinateSpaceHeight(clientHeight);
}

设置坐标空间后,您可以调用
drawMyImage()

对,但由于我将宽度/高度指定为“100%”,这似乎不起作用?我想在浏览器将画布充气到100%宽度/高度后知道它的大小(以像素为单位)。谢谢你的回答,克里斯,这很有意义。如果用户在运行时更改浏览器的大小,我可能应该更新坐标空间,对吗?(我想有一个onWindowSizeChanged监听器)。谢谢大家!@砖匠你能详细说明一下吗?