ユーザーID パスワード

技術情報

  • FAQ よくある質問
  • 個人ユーザー向けサービスのお手続きについて

コード&コラム Web編 〜実践!HTML5〜

第2章 Canvas (2/3)

パスの描画

Canvasではパスを用いて直線、矩形、二次曲線、ペジェ曲線等の様々な形の図形を描く事ができます。
パスを利用して図形を描画する場合はbeginPath(), closePath(), moveTo(), stroke(), fill()のそれぞれのメソッドを適切に利用する必要があります。

beginPath() - パスの初期化を行う

// パスを初期化する
context.beginPath();

closePath() - パスを閉じる

// パスを閉じる
context.closePath();

moveTo(x, y) - 指定されたx, y座標で新規パスを生成する

// 10px,10pxの座標で新規パスを生成する
context.moveTo(10,10);

srtoke() - 線を描画する

// 線の描画を行う
context.stroke();

fill() - 塗り潰す

// 塗り潰し描画を行う
context.fill();

パスを作成して図形を描画する際は以下のステップでパスの設定を行います。

  • beginPathメソッドで現在のパスの初期化を実施する
  • moveToメソッドでパスの開始位置を設定する
  • 各種メソッドでパスを定義する
  • closePathメソッドでパスを閉じる
  • strokeメソッドを用いた線、もしくはfillメソッドを用いた塗り潰しによる実際の描画を行う

尚、fillメソッドを利用する場合は開いているパスが自動的に閉じられる為、closePathメソッドを使う必要はありません。

それでは図形描画の各メソッドを見ていきましょう。
尚、これより先のサンプルコードは予め2dコンテキストが取得済みであることを前提として記載しています。

lineTo(x, y) - 直線の描画

現在のパスより引数で指定しているx座標、y座標に対して直線を引きます。
指定する引数は以下の通りです。

  • x:終点x座標
  • y:終点y座標
// パスを初期化する
context.beginPath();
// 指定からx座標200px、y座標50pxへの直線パスを設定する
context.lineTo(200,50);
// 描画を実行する
context.stroke();

図4

図4: 横幅300px、縦幅250pxのCanvasに描画した場合

arc (x, y, radius, startAngle, endAngle, anticlockwise) - 円弧の描画

引数で指定した位置、角度、方向で円弧を描画します。
指定する引数は以下の通りです。

  • x:円の中心x座標
  • y:円の中心y座標
  • radious:円の半径
  • startAngle:円弧描画の開始角度
  • endAngle:円弧描画の終了角度
  • anticlockwise:反時計回りかどうか
// パスを初期化する
context.beginPath();
// 円を描画する
context.arc(50, 50, 40, 0, 10*Math.PI/180, 120*Math.PI/180, true);
// 描画を実行する
context.stroke();

図5

図5: 横幅300px、縦幅250pxのCanvasに描画した場合

quadraticCurveTo (cpx, cpy, x, y) - 二次ベジェ曲線を描画する

現在のパスに対してcpx,cpyで設定した制御点を伴う二次ペジェ曲線を描画します。
指定する引数は以下の通りです。

  • cpx:x座標制御点
  • cpy:y座標制御点
  • x:終点x座標
  • y:終点y座標
// パスを初期化する
context.beginPath();
// 円を描画する
context.quadraticCurveTo(50, 100, 100, 0);
// 描画を実行する
context.stroke();

図6

図6: 横幅300px、縦幅250pxのCanvasに描画した場合

bezireCurveTo(cpx, cpy, cp2x, cp2y, x, y) - 三次ベジェ曲線を描画する

現在のパスに対して(cpx, cpy)と(cpx2, cpy2)で設定した制御点を伴う三次ベジェ曲線を描画します。
指定する引数は以下の通りです。

  • cpx:制御点1のx座標
  • cpy:制御点1のy座標
  • cpx2:制御点2のx座標
  • cpy2:制御点2のy座標
  • x:終点x座標
  • y:終点y座標
// パスを初期化する
context.beginPath();
// 円を描画する
context.bezierCurveTo(30, 90, 70, 90, 90, 10);
// 描画を実行する
context.stroke();

図7

図7: 横幅300px、縦幅250pxのCanvasに描画した場合



プロパティの設定

2dコンテキストのプロパティによりCanvasに描画する図形の色や線のスタイル等の図形の装飾が可能となっています。
以下に代表的なプロパティと設定方法を記載します。

fillStyle - 図形の塗り潰し色

fillStyleプロパティにより、描画した図形の塗り潰し色を設定することができます。
カラー名、カラーコード、rgb、rgbaによる指定が可能です。

context.fillStyle = "black";
context.fillStyle = "#000000";
context.fillStyle = "rgb(0,0,0)";
context.fillStyle = "rgba(0,0,0,1)";

strokeStyle - 図形輪郭の色

strokeStyleプロパティにより、描画した図形の輪郭の色を設定することができます。
設定方法はfillStyleプロパティと同様です。

context.strokeStyle = "black";
context.strokeStyle = "#000000";
context.strokeStyle = "rgb(0,0,0)";
context.strokeStyle = "rgba(0,0,0,1)";

lineWidth - 線の太さ

lineWidthプロパティを変更することで線の太さの設定が行えます。標準では1.0に設定されています。また、この値は正数のみ設定可能となります。

context.lineWidth = 10;

lineCap - 線の終点

線の終点の種類を変えるにはlineCapプロパティの設定を変更することで対応可能です。lineCapはbutt、round、squareの3つのオプションから設定できます。
各オプションの詳細は以下の通りです。

  • butt:デフォルト値。終点が平坦な状態
  • round:線の終点に線幅と等しい幅の半円を加える
  • square:線の終点に線幅と等しい幅の長方形を加える
context.lineCap = "round";

lineJoin - 図形においての線の接続

lineJoinプロパティで図形においての線が互いにどのように接続するか設定することができます。lineJoinはround, bavel, miterの3つのオプションから設定できます。
各オプションの詳細は以下の通りです。

  • miter:デフォルト値。線の接続部分は面取りせず留め継ぎにする
  • round:線の接続部分を丸くする
  • bavel:接続部分の面取りする
context.lineJoin = "round";

shadowColor - 影の色

shadowColorプロパティで図形に追加する影の色をrgbで設定します。

context.shadowColor = "black";
context.shadowColor = "#000000";
context.shadowColor = "rgb(0,0,0)";
context.shadowColor = "rgba(0,0,0,1)";

shadowOffsetX - 影の水平方向オフセット値

影の水平方向Offset値はshadowOffsetプロパティにて設定します。初期値は0となります。

context.shadowOffsetX = 10;

shadowOffsetY - 影の垂直方向オフセット値

shasowOddsetXと同様に、影の垂直方向Offset値はshadowOffsetプロパティにて設定します。初期値は0となります。

context.shadowOffsetY = 10;

shadowBlur - 影のぼかしレベル

shadowBlurプロパティにて影のぼかし効果レベルの設定が行えます。初期値は0であり、数値を大きくする程ぼかしレベルも大きくなります。

context.shadowBlur = 5;


サンプルコード

第1章
Audio/Video

第2章
Canvas

第3章
Photo Gallery

第4章
神経衰弱ゲーム