HTML Canvas を利用して長方形 (矩形) を描画する

HTML Canvas を利用して長方形 (矩形) を描画するコードを紹介します。

概要

矩形を描画するには、Canvasのコンテキストのrect()メソッドを利用します。

プログラム

コード

下記のコードのHTMLファイルを作成します。
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title></title>
  <meta charset="utf-8" />

  <script type="text/javascript">
  function draw() {
    var canvas = document.getElementById('SimpleCanvas');

    if ( ! canvas || ! canvas.getContext ) {
      return false;
    }

    var cx = 360;
    var cy = 400;
    var radius = 36;

    var context = canvas.getContext('2d');
    context.beginPath();
    context.rect(240, 80, 160, 80);
    context.fillStyle = 'peachpuff';
    context.fill();
    context.lineWidth = 2;
    context.strokeStyle = 'coral';
    context.stroke();
  }
  </script>
</head>
<body onload="draw()" style="background-color:#D0D0D0;">
  <canvas id="SimpleCanvas" width="640" height="480" style="background-color:#FFFFFF;"></canvas>
  <div>Canvas Demo</div>
</body>
</html>

解説

  function draw() {
    var canvas = document.getElementById('SimpleCanvas');

    if ( ! canvas || ! canvas.getContext ) {
      return false;
    }

    var cx = 360;
    var cy = 400;
    var radius = 36;

    var context = canvas.getContext('2d');
    context.beginPath();
    context.rect(240, 80, 160, 80);
    context.fillStyle = 'peachpuff';
    context.fill();
    context.lineWidth = 2;
    context.strokeStyle = 'coral';
    context.stroke();
  }
document.getElementById()メソッドでCanvasオブジェクトを取得し、CanvasオブジェクトのgetContext()メソッドを呼び出してCanvasコンテキストを取得する処理についてはキャンバスに描画する際の共通処理です。詳しくはこちらの記事を参照して下さい。

コンテキストのbeginPath()メソッドを呼び出してパスを開始します。rect()で矩形を描画します。rectの第一引数、代に引数は矩形の左上のX,Y座標になります。第三引数は描画する矩形の幅、第四引数は描画する矩形の高さを与えます。
fill()メソッドで内部を塗りつぶし、strokeメソッドで外形の線を描画します。

実行結果

作成したHTMLファイルをWebブラウザで表示します。下図の結果が表示されます。

プログラム (内部を塗りつぶさない場合)

内部を塗りつぶさないで矩形を描画するコードを紹介します。
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title></title>
  <meta charset="utf-8" />
  <style type="text/css">
    <!--
    .canvas{
      background-color:#FFFFFF;
      background-image: url("/resource/tile.png");
    }
    -->
  </style>


  <script type="text/javascript">
  function draw() {
    var canvas = document.getElementById('SimpleCanvas');

    if ( ! canvas || ! canvas.getContext ) {
      return false;
    }

    var cx = 360;
    var cy = 400;
    var radius = 36;

    var context = canvas.getContext('2d');
    context.beginPath();
    context.rect(240, 80, 160, 80);

    context.lineWidth = 4;
    context.strokeStyle = 'coral';
    context.stroke();

}
  </script>
</head>
<body onload="draw()" style="background-color:#D0D0D0;">
  <canvas id="SimpleCanvas" width="640" height="480" class="canvas"></canvas>
  <div>Canvas Demo</div>
</body>
</html>

"/resource/tile.png" には下図の画像を利用します。

解説

描画のロジック内で、fill()メソッドを呼び出さずに stroke()メソッドのみを実行すると、内部の塗りつぶしをしない矩形が描画できます。

実行結果

WebブラウザでHTMLファイルを表示します。下図の画面が表示されます。

プログラム (内部を塗りつぶし外枠を描画しない場合)

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title></title>
  <meta charset="utf-8" />

  <script type="text/javascript">
  function draw() {
    var canvas = document.getElementById('SimpleCanvas');

    if ( ! canvas || ! canvas.getContext ) {
      return false;
    }

    var cx = 360;
    var cy = 400;
    var radius = 36;

    var context = canvas.getContext('2d');
    context.beginPath();
    context.rect(260, 120, 220, 120);
    context.fillStyle = 'burlywood';
    context.fill();

}
  </script>
</head>
<body onload="draw()" style="background-color:#D0D0D0;">
  <canvas id="SimpleCanvas" width="640" height="480" style="background-color:#FFFFFF;"></canvas>
  <div>Canvas Demo</div>
</body>
</html>

解説

描画のロジック内で、stroke()メソッドを呼び出さずに fill()メソッドのみを実行すると、内部を塗りつぶし、外枠を描画しない矩形が描画できます。

実行結果

WebブラウザでHTMLファイルを表示します。下図の画面が表示されます。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2015-10-05
作成日: 2015-09-29
iPentec all rights reserverd.