高DPI画面でのシャープなCanvas描画
Canvasバッファをデバイスピクセル比に合わせてスケーリングし、RetinaおよびHiDPIディスプレイでのぼやけたHTML5 Canvas描画を修正します。ステップバイステップのコード例を含みます。
Practical
詳細な説明
ぼやけたCanvasの問題
デフォルトでは、<canvas>要素の内部ビットマップ解像度はCSSサイズと一致します。DPR 2のディスプレイでは、300×150のCanvasが600×300の物理ピクセルにアップスケールされ、ぼやけます。
修正方法
Canvasバッファをデバイスピクセル比に合わせてスケーリングします:
function setupHiDPICanvas(canvas, width, height) {
const dpr = window.devicePixelRatio || 1;
canvas.width = width * dpr;
canvas.height = height * dpr;
canvas.style.width = width + 'px';
canvas.style.height = height + 'px';
const ctx = canvas.getContext('2d');
ctx.scale(dpr, dpr);
return ctx;
}
パフォーマンスのトレードオフ
DPR 3のCanvasはDPR 1と比べて9倍のピクセルを持ちます。アニメーションの多いCanvasでは、DPR 2で上限を設けることを検討してください:
const dpr = Math.min(window.devicePixelRatio || 1, 2);
ユースケース
Canvasベースのアプリケーション(チャート、ゲーム、描画ツール)を構築する開発者は、現代の高DPI画面でぼやけた出力を防ぐためにDPR対応レンダリングが必要です。