それは(驚くべきことに)
c.getContext2d().rect(0, 0, 299, 149);
...キャンバスの実際のピクセルサイズに関係なく。その理由は、300x150がデフォルトの座標空間サイズであるためです。http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#the-canvas-elementを参照してください。
canvas.setCoordinateSpaceWidth()
これは、 andを使用して好きなように変更できcanvas.setCoordinateSpaceHeight()
ます。
多くの場合、人々はキャンバスの実際のサイズとは無関係に描画したいので、座標空間を100x100のようなものに設定するだけで、描画された画像は自動的に拡大縮小されます。
ただし、実際のキャンバスのピクセルサイズについて知りたい場合があります。
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
@Override
public void execute() {
final int clientWidth = canvas.getElement().getClientWidth();
final int clientHeight = canvas.getElement().getClientHeight();
setupCoordinateSpace(canvas, clientWidth, clientHeight);
drawMyImage(canvas);
}
});
scheduleDeferred
クライアントのサイズはブラウザがレイアウトを実行する機会を得た後でのみわかるため、これはで行う必要があることに注意してください。
この情報を使用して、キャンバスに一致するようにアスペクト比を調整できます(そうしないと、画像が歪むため、これをお勧めします)
void setupCoordinateSpace(Canvas canvas, int clientWidth, int clientHeight) {
final double aspect = (double) clientWidth / (double) clientHeight;
canvas.setCoordinateSpaceHeight(
(int) (myCoordinateSpaceWidth / aspect));
}
または、ピクセルサイズに一致するように座標空間を設定して、HTML5キャンバスでピクセル単位の正確な描画を実行することもできます。
void setupCoordinateSpace(Canvas canvas, int clientWidth, int clientHeight) {
canvas.setCoordinateSpaceWidth(clientWidth);
canvas.setCoordinateSpaceHeight(clientHeight);
}
座標空間が設定された後、あなたは呼び出すことができますdrawMyImage()