HTML5의 Canvas에 도트 그림 그리기

전제



HTML5의 Canvas에 도트 그림을 그리고 싶다!

제대로 된 사양이 신경이 쓰이는 사람은 W3C의 레퍼런스를 보면 좋다!
htps //w w. w3. rg/TR/2d 이렇게 xt/

그리기 위한 컨텍스트 얻기


CanvasRenderingContext2D context = canvas.getContext("2d");
  • canvas : HTML5의 Canvas
  • context : 그리기 컨텍스트

  • 이후의 처리를 실시하려면 , 이 문맥이 필요합니다.
    인수의 "2d"는, 모르는 것 같은 것이므로 그대로 쓴다!

    Canvas 채우기


    context.fillStyle = style;
    context.fillRect(x, y, width, height);
    
  • style : 채우기 스타일 (CSS 컬러 캐릭터 라인, CanvasGradient 오브젝트, CanvasPattern 오브젝트로 지정)
  • x: X 좌표
  • y:Y 좌표
  • width:폭
  • height: 높이

  • 필수는 아니지만, 만나지 않고 Canvas를 채우는데 사용한다.

    이미지 데이터 만들기


    ImageData image = context.createImageData(width, height);
    
  • width:폭
  • height: 높이
  • image : 이미지 데이터

  • 이미지 데이터란?


  • [이미지 데이터].width:폭
  • [이미지 데이터].height: 높이
  • [이미지 데이터].data: 데이터

  • 데이터의 구조는, 배열로 좌상으로부터 우 방향으로 우하의 데이터가,1ピクセル目の赤(0~255)、1ピクセル目の緑(0~255)、1ピクセル目の青(0~255)、1ピクセル目のアルファ値(0~255)、2ピクセル目の赤(0~255)、2ピクセル目の緑(0~255)、2ピクセル目の青(0~255)、2ピクセル目のアルファ値(0~255)、…와 너비 × 높이 × 4 (적색, 녹색, 청색, 알파 값)의 크기만큼 저장됩니다.



    데이터에 쓰고 싶은 도트 그림의 정보를 설정한다.
    실제 도트 그림에서, 뭔가의 수단으로 변경하는 것이 좋을 것 같아…

    이미지 데이터 만들기


    context.putImageData(image , x, y);
    
  • context : 문맥
  • image : 이미지 데이터
  • x: X 좌표
  • y:Y 좌표

  • 도트 그림의 데이터를 설정한 이미지 데이터를 Canvas에 작화한다.
    작화 좌표를 설정할 수 있으므로, 애니메이션이라고도 할 수 있을 것 같다.

    근거를 두고 서로 쓰지 못했습니다.



    도트 그림을 표시하는 HTML
    <!DOCTYPE html>
    <html lang="jp">
      <head>
        <meta charset="utf-8">
      </head>
      <body>
        <canvas id="canvas" width="256" height="256"></canvas>
        <script>
          // 設定するドット絵はコレ!
          const dotData = 
              "□□■□□□□□■□□" +
              "□□□■□□□■□□□" +
              "□□■■■■■■■□□" +
              "□■■□■■■□■■□" +
              "■■■■■■■■■■■" +
              "■□■■■■■■■□■" +
              "■□■□□□□□■□■" +
              "□□□■■□■■□□□";
    
          // キャンバスを取得する
          let canvas = document.getElementById("canvas");
    
          // 作画するためのコンテキストを取得する
          let context = canvas.getContext("2d");
    
          // キャンバスを黒く塗りつぶす
          context.fillStyle = "black";
          context.fillRect(0, 0, canvas.width, canvas.height);
    
          // イメージデータを作成する
          let imageData = context.createImageData(11, 8);
    
          // イメージデータにドット絵のデータを設定する
          let dotDataArr = dotData.split("");
          for (let i = 0; i < dotDataArr.length; i++) {
            switch(dotDataArr[i])
            {
              case "": // ■は水色
                imageData.data[i * 4 + 0] = 0; // 赤
                imageData.data[i * 4 + 1] = 255; // 緑
                imageData.data[i * 4 + 2] = 255; // 青
                imageData.data[i * 4 + 3] = 255; // アルファ
                break;
              default: // それ以外は黒色
                imageData.data[i * 4 + 0] = 0; // 赤
                imageData.data[i * 4 + 1] = 0; // 緑
                imageData.data[i * 4 + 2] = 0; // 青
                imageData.data[i * 4 + 3] = 255; // アルファ
            }
          }
    
          // イメージデータを作画する
          context.putImageData(imageData, 15, 10); // 1匹目
          context.putImageData(imageData, 40, 10); // 2匹目
          context.putImageData(imageData, 65, 10); // 3匹目
          context.putImageData(imageData, 90, 10); // 4匹目
        </script>
      </body>
    </html>
    

    브라우저에서 표시





    감상



    비교적 간단!
    응용이 좋을 것 같지만, 재료는 없다!

    좋은 웹페이지 즐겨찾기