SlideShare a Scribd company logo
1 of 37
Canvas入門04
Canvasで簡易ペイントソフト作成
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 2
今回の講義内容
• Canvasの描画機能を利用して、ペイン
トソフトを作成
– マウス操作とcanvasの‘線’を利用してペイ
ント機能を実装
– タッチ操作で同様の機能を実装
– マウスとタッチの両方動作するようにする
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 3
完成イメージ
カラー変更
太さ変更
画面クリア 保存
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 4
作業内容の基本
• 線の描画
– 作成する基本的な内容は、
マウス(指)を動かしている時に、マウス座標に
線を描画する
だけです。
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 5
まずは、線を描画してみましょう。
ctx.beginPath();
ctx.moveTo(x, y);
ctx.lineTo(x, y);
ctx.stroke();
moveTo (0,0)
lineTo (100,100) moveTo (300,100)
lineTo (400, 0)
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 6
ペイントの基本仕様
• Canvasのサイズ
– 縦幅:画面縦幅の半分
– 横幅:画面横幅に合わせる
• 背景用四角形の描画
– Canvasと同じサイズ、塗り白色の四角形を描画
• Canvas上の操作
– タッチ、マウスの両方で動作可
• ペンの初期値
– 太さ:2px
– 色:赤色
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 7
ペイントの基本仕様
• Canvasのサイズ
– 縦幅:画面縦幅の半分
– 横幅:画面横幅に合わせる
• 背景用四角形の描画
– Canvasと同じサイズ、塗り白色の四角形を描画
• Canvas上の操作
– タッチ、マウスの両方で動作可
• ペンの初期値
– 太さ:2px
– 色:赤色
課題
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 8
描画操作の流れ
• touchstart / mousedown(画面をタッチ・マウスダウンした時)
– 線の色や太さを指定する
– タッチした座標で moveTo()
– ?
• touchmove / mousemove(画面上をドラッグした時)
– 移動後の座標で lineTo()
– stroke() する
• touchend / mouseup(画面から指・マウスを離した時)
– ?
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 9
まずはPC用に
マウス操作
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 10
ユーザ入力による制御
• マウスなどのユーザ操作(イベント)の制御方法
記述例
対象要素.addEventListener( ’ユーザ操作’, function(e){
実行したい内容;
});
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 11
マウス操作
• 主なマウスイベント(ユーザ操作)
– click クリック
– dblclick ダブルクリック
– mouseout 要素上からマウスが離れた
– mouseover 要素上にマウスが乗った
– mousedown マウスボタン押した
– mouseup マウスボタンを離した
– mousemove マウスが動いた
• マウス座標の取得(引数を利用)
– e.pageX : マウスポインタがある X 座標
– e.pageY : マウスポインタがある Y 座標
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 12
マウス操作
• 下記のイベントの違いを確認しよう
– click クリック
– mousedown マウスボタンを押した
– mouseup マウスボタンを離した
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 13
動きが変!
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 14
描画操作の流れ
• touchstart / mousedown(画面をタッチ・マウスダウンした時)
– 線の色や太さを指定する
– タッチした座標で moveTo()
– 描画開始したことを覚える(フラグ)
• touchmove / mousemove(画面上をドラッグした時)
– 移動後の座標で lineTo()
– stroke() する
• touchend / mouseup(画面から指・マウスを離した時)
– 描画終了したことを覚える(フラグ)
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 15
マウスダウン直後か
どうか判断する
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 16
If文と変数で
実現できます
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 17
この変数を
フラグと言います
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 18
スマホ用に
タッチ操作
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 19
ユーザ操作
• タッチ操作
– touchstart : タッチしたとき
– touchmove : タッチしたまま動かしたとき
– touchend : タッチ状態から離れたとき
• タッチ座標
– event.changedTouches[0].pageX
: タッチされている画面位置の X 座標
– event.changedTouches[0].pageY
: タッチされている画面位置の Y 座標
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 20
共通のコードで
動作確認したい
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 21
jQueryを使って
簡略化
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 22
今回の使い方
• onを使う
– onを使うと、複数同時にイベントを設定できる
セレクタ.on(’操作1 操作2’, function(e){
実行したい内容;
});
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 23
タッチ環境かどうか確認
• 確認方法
• 結果
– true だとタッチ環境、false だとマウス環境
– 上記を判断して、JSの記述を分岐する
('ontouchstart' in window)
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 24
スマホのブラウザで
操作してみよう
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 25
注意点
• クリックやタッチは、他のコンテンツでも
反応
– PCの場合:<a>タグなど
– スマフォの場合:ページスクロールなど
• 回避方法
– e.preventDefault()
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 26
タッチすると
画面が青くなる
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 27
タッチすると画面が青い
• Androidのブラウザの仕様
– CSSで解決
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 28
カラーの変更
• 赤、青、緑、黄、黒
– <ul><li>タグを利用して、CSSで背景色を指
定してボタンを作成
• 設定手段
– 各<li>タグを、touchstart / mousedown し
たら、線の色を指定の色に変更する
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 29
カラーの変更
• タッチ処理に、同じような設定が多くて
面倒
• 処理を一つにまとめたい
– <li>タグの背景色をそのまま利用して、一つ
の処理にまとめる
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 30
ペンサイズの変更
• 線の太さを変更
– <ul><li>タグを利用して、2px、4px、6pxに
変更できるボタンを作成
• 設定手段
– 各<li>タグを、touchstart / mousedown し
たら、線の太さを変更
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 31
ペンサイズの変更
• タッチ処理に、同じような設定が多くて
面倒
• 処理を一つにまとめたい
– <li>タグの文字をそのまま利用して、一つの
処理にまとめる
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 32
クリアボタン
• 画面を真っ白に変更
– <ul><li>タグを利用して、ボタンを作成
• 設定手段
– <li>タグを、touchstart / mousedown した
ら、clearRectをして、白色の矩形を描画し
直す
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 33
画像保存
• Canvasの問題点
– canvasのデータは、そのまま画像ファイルと
して保存できない。
• 実現手段
– Imgタグとして表示して、ブラウザの機能で
保存する
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 34
画像形式に変換
• canvasデータを画像形式に変換
– <ul><li>タグを利用してボタンを作成し、ボタ
ンを押したら、変換したデータを<img>で表
示
• 変換方法
– canvas. toDataURL()
• 画像のアドレスとして生成される
• 生成されたアドレスを利用して、imgタグで表示
• HTML上に<div>タグを記述し、その中にimgタグ
を追加する
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 35
タグの生成方法
• タグの生成
オブジェクト名 = document.createElement(“タグ名”);
• 属性の追加
オブジェクト名.属性名 = 値;
• タグ内への文章追加
オブジェクト名. innerHTML = 値;
• タグへのCSS指定
オブジェクト名. style.プロパティ = 値;
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 36
タグの追加方法
• ID指定でのタグの追加
document.getElementById(“id名”).appendChild(オブジェクト名);
• タグ指定でのタグ追加
var 親オブジェクト名 =
document.getElementByTagName (“親タグ名”);
親オブジェクト名[何番目].appendChild (オブジェクト名);
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 37
次回までの課題
• ボタンなどの見た目をデザインしてみよう
• 可能であれば、オリジナル機能を追加してみよう。

More Related Content

Viewers also liked

Framerで始めるプロトタイプコーディング
Framerで始めるプロトタイプコーディングFramerで始めるプロトタイプコーディング
Framerで始めるプロトタイプコーディングmasaaki komori
 
インターネットってなんだろう?
インターネットってなんだろう?インターネットってなんだろう?
インターネットってなんだろう?Tsutomu Kawamura
 
Vimから見たemacs
Vimから見たemacsVimから見たemacs
Vimから見たemacsShougo
 
JavaScriptによるvideo audio要素のコントロール入門
JavaScriptによるvideo audio要素のコントロール入門JavaScriptによるvideo audio要素のコントロール入門
JavaScriptによるvideo audio要素のコントロール入門Yossy Taka
 
Webデザイン入門2-HTML5 フォーム,映像再生,音声再生, CSS3, レスポンシブWebデザイン-
Webデザイン入門2-HTML5 フォーム,映像再生,音声再生, CSS3, レスポンシブWebデザイン-Webデザイン入門2-HTML5 フォーム,映像再生,音声再生, CSS3, レスポンシブWebデザイン-
Webデザイン入門2-HTML5 フォーム,映像再生,音声再生, CSS3, レスポンシブWebデザイン-Yossy Taka
 
スマホアプリ開発-プロモーション・集客・サポート・広告収入-
スマホアプリ開発-プロモーション・集客・サポート・広告収入-スマホアプリ開発-プロモーション・集客・サポート・広告収入-
スマホアプリ開発-プロモーション・集客・サポート・広告収入-Yossy Taka
 
Ajax非同期通信によるサーバー通信
Ajax非同期通信によるサーバー通信Ajax非同期通信によるサーバー通信
Ajax非同期通信によるサーバー通信Yossy Taka
 
JavaScriptによるgoogle maps apiの使い方
JavaScriptによるgoogle maps apiの使い方JavaScriptによるgoogle maps apiの使い方
JavaScriptによるgoogle maps apiの使い方Yossy Taka
 
JavaScriptのオブジェクト:Mathオブジェクト、Dateオブジェクト
JavaScriptのオブジェクト:Mathオブジェクト、DateオブジェクトJavaScriptのオブジェクト:Mathオブジェクト、Dateオブジェクト
JavaScriptのオブジェクト:Mathオブジェクト、DateオブジェクトYossy Taka
 
JavaScript Basic 02 jQuery
JavaScript Basic 02 jQueryJavaScript Basic 02 jQuery
JavaScript Basic 02 jQueryYossy Taka
 
JavaScript Basic 01
JavaScript Basic 01JavaScript Basic 01
JavaScript Basic 01Yossy Taka
 
Webデザインのセオリーを学ぼう
Webデザインのセオリーを学ぼうWebデザインのセオリーを学ぼう
Webデザインのセオリーを学ぼうToshiaki Sasaki
 

Viewers also liked (12)

Framerで始めるプロトタイプコーディング
Framerで始めるプロトタイプコーディングFramerで始めるプロトタイプコーディング
Framerで始めるプロトタイプコーディング
 
インターネットってなんだろう?
インターネットってなんだろう?インターネットってなんだろう?
インターネットってなんだろう?
 
Vimから見たemacs
Vimから見たemacsVimから見たemacs
Vimから見たemacs
 
JavaScriptによるvideo audio要素のコントロール入門
JavaScriptによるvideo audio要素のコントロール入門JavaScriptによるvideo audio要素のコントロール入門
JavaScriptによるvideo audio要素のコントロール入門
 
Webデザイン入門2-HTML5 フォーム,映像再生,音声再生, CSS3, レスポンシブWebデザイン-
Webデザイン入門2-HTML5 フォーム,映像再生,音声再生, CSS3, レスポンシブWebデザイン-Webデザイン入門2-HTML5 フォーム,映像再生,音声再生, CSS3, レスポンシブWebデザイン-
Webデザイン入門2-HTML5 フォーム,映像再生,音声再生, CSS3, レスポンシブWebデザイン-
 
スマホアプリ開発-プロモーション・集客・サポート・広告収入-
スマホアプリ開発-プロモーション・集客・サポート・広告収入-スマホアプリ開発-プロモーション・集客・サポート・広告収入-
スマホアプリ開発-プロモーション・集客・サポート・広告収入-
 
Ajax非同期通信によるサーバー通信
Ajax非同期通信によるサーバー通信Ajax非同期通信によるサーバー通信
Ajax非同期通信によるサーバー通信
 
JavaScriptによるgoogle maps apiの使い方
JavaScriptによるgoogle maps apiの使い方JavaScriptによるgoogle maps apiの使い方
JavaScriptによるgoogle maps apiの使い方
 
JavaScriptのオブジェクト:Mathオブジェクト、Dateオブジェクト
JavaScriptのオブジェクト:Mathオブジェクト、DateオブジェクトJavaScriptのオブジェクト:Mathオブジェクト、Dateオブジェクト
JavaScriptのオブジェクト:Mathオブジェクト、Dateオブジェクト
 
JavaScript Basic 02 jQuery
JavaScript Basic 02 jQueryJavaScript Basic 02 jQuery
JavaScript Basic 02 jQuery
 
JavaScript Basic 01
JavaScript Basic 01JavaScript Basic 01
JavaScript Basic 01
 
Webデザインのセオリーを学ぼう
Webデザインのセオリーを学ぼうWebデザインのセオリーを学ぼう
Webデザインのセオリーを学ぼう
 

Similar to Canvasでペイントアプリ作成

UX on HTML5 x Touch UI
UX on HTML5 x Touch UIUX on HTML5 x Touch UI
UX on HTML5 x Touch UIdsuke Takaoka
 
個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。
個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。
個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。ssusere75907
 
Meetup tokyo.20120924
Meetup tokyo.20120924Meetup tokyo.20120924
Meetup tokyo.20120924Kosuke Isobe
 
デザイナーと一緒にコラボして仕上げるアニメーション実装とショーケース紹介
デザイナーと一緒にコラボして仕上げるアニメーション実装とショーケース紹介 デザイナーと一緒にコラボして仕上げるアニメーション実装とショーケース紹介
デザイナーと一緒にコラボして仕上げるアニメーション実装とショーケース紹介 Fumiya Sakai
 
wxPython入門(大阪Pythonユーザの集まり2014/03)
wxPython入門(大阪Pythonユーザの集まり2014/03)wxPython入門(大阪Pythonユーザの集まり2014/03)
wxPython入門(大阪Pythonユーザの集まり2014/03)泰 増田
 
iOS 9 Bootcamp #6 UIKit
iOS 9 Bootcamp #6 UIKitiOS 9 Bootcamp #6 UIKit
iOS 9 Bootcamp #6 UIKitShingo Hiraya
 
Silverlightで作るマルチタッチアプリケーション 2
Silverlightで作るマルチタッチアプリケーション 2Silverlightで作るマルチタッチアプリケーション 2
Silverlightで作るマルチタッチアプリケーション 2Yoshitaka Seo
 

Similar to Canvasでペイントアプリ作成 (8)

UX on HTML5 x Touch UI
UX on HTML5 x Touch UIUX on HTML5 x Touch UI
UX on HTML5 x Touch UI
 
個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。
個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。
個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。
 
Swift Study Vol.4
Swift Study Vol.4Swift Study Vol.4
Swift Study Vol.4
 
Meetup tokyo.20120924
Meetup tokyo.20120924Meetup tokyo.20120924
Meetup tokyo.20120924
 
デザイナーと一緒にコラボして仕上げるアニメーション実装とショーケース紹介
デザイナーと一緒にコラボして仕上げるアニメーション実装とショーケース紹介 デザイナーと一緒にコラボして仕上げるアニメーション実装とショーケース紹介
デザイナーと一緒にコラボして仕上げるアニメーション実装とショーケース紹介
 
wxPython入門(大阪Pythonユーザの集まり2014/03)
wxPython入門(大阪Pythonユーザの集まり2014/03)wxPython入門(大阪Pythonユーザの集まり2014/03)
wxPython入門(大阪Pythonユーザの集まり2014/03)
 
iOS 9 Bootcamp #6 UIKit
iOS 9 Bootcamp #6 UIKitiOS 9 Bootcamp #6 UIKit
iOS 9 Bootcamp #6 UIKit
 
Silverlightで作るマルチタッチアプリケーション 2
Silverlightで作るマルチタッチアプリケーション 2Silverlightで作るマルチタッチアプリケーション 2
Silverlightで作るマルチタッチアプリケーション 2
 

More from Yossy Taka

WebサイトへのYotutube動画の設置
WebサイトへのYotutube動画の設置WebサイトへのYotutube動画の設置
WebサイトへのYotutube動画の設置Yossy Taka
 
Bracketsを使おう
Bracketsを使おうBracketsを使おう
Bracketsを使おうYossy Taka
 
JavaScript 基礎文法のまとめ
JavaScript 基礎文法のまとめJavaScript 基礎文法のまとめ
JavaScript 基礎文法のまとめYossy Taka
 
canvasによるアナログ時計の作成
canvasによるアナログ時計の作成canvasによるアナログ時計の作成
canvasによるアナログ時計の作成Yossy Taka
 
ハイブリッドアプリについて-PhoneGapアプリ制作の入り口-
ハイブリッドアプリについて-PhoneGapアプリ制作の入り口-ハイブリッドアプリについて-PhoneGapアプリ制作の入り口-
ハイブリッドアプリについて-PhoneGapアプリ制作の入り口-Yossy Taka
 
Webの仕組みとプログラミング言語
Webの仕組みとプログラミング言語Webの仕組みとプログラミング言語
Webの仕組みとプログラミング言語Yossy Taka
 
WebデザイナのためのjQuery入門。
WebデザイナのためのjQuery入門。WebデザイナのためのjQuery入門。
WebデザイナのためのjQuery入門。Yossy Taka
 
JavaScript04 jquery プラグインを使おう
JavaScript04 jquery プラグインを使おうJavaScript04 jquery プラグインを使おう
JavaScript04 jquery プラグインを使おうYossy Taka
 
JavaScript basic, jQuery animation
JavaScript basic, jQuery animationJavaScript basic, jQuery animation
JavaScript basic, jQuery animationYossy Taka
 
Webデザイン入門1-HTML5・CSSについて-
Webデザイン入門1-HTML5・CSSについて-Webデザイン入門1-HTML5・CSSについて-
Webデザイン入門1-HTML5・CSSについて-Yossy Taka
 

More from Yossy Taka (10)

WebサイトへのYotutube動画の設置
WebサイトへのYotutube動画の設置WebサイトへのYotutube動画の設置
WebサイトへのYotutube動画の設置
 
Bracketsを使おう
Bracketsを使おうBracketsを使おう
Bracketsを使おう
 
JavaScript 基礎文法のまとめ
JavaScript 基礎文法のまとめJavaScript 基礎文法のまとめ
JavaScript 基礎文法のまとめ
 
canvasによるアナログ時計の作成
canvasによるアナログ時計の作成canvasによるアナログ時計の作成
canvasによるアナログ時計の作成
 
ハイブリッドアプリについて-PhoneGapアプリ制作の入り口-
ハイブリッドアプリについて-PhoneGapアプリ制作の入り口-ハイブリッドアプリについて-PhoneGapアプリ制作の入り口-
ハイブリッドアプリについて-PhoneGapアプリ制作の入り口-
 
Webの仕組みとプログラミング言語
Webの仕組みとプログラミング言語Webの仕組みとプログラミング言語
Webの仕組みとプログラミング言語
 
WebデザイナのためのjQuery入門。
WebデザイナのためのjQuery入門。WebデザイナのためのjQuery入門。
WebデザイナのためのjQuery入門。
 
JavaScript04 jquery プラグインを使おう
JavaScript04 jquery プラグインを使おうJavaScript04 jquery プラグインを使おう
JavaScript04 jquery プラグインを使おう
 
JavaScript basic, jQuery animation
JavaScript basic, jQuery animationJavaScript basic, jQuery animation
JavaScript basic, jQuery animation
 
Webデザイン入門1-HTML5・CSSについて-
Webデザイン入門1-HTML5・CSSについて-Webデザイン入門1-HTML5・CSSについて-
Webデザイン入門1-HTML5・CSSについて-
 

Recently uploaded

Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 

Recently uploaded (9)

Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 

Canvasでペイントアプリ作成

  • 2. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 2 今回の講義内容 • Canvasの描画機能を利用して、ペイン トソフトを作成 – マウス操作とcanvasの‘線’を利用してペイ ント機能を実装 – タッチ操作で同様の機能を実装 – マウスとタッチの両方動作するようにする
  • 3. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 3 完成イメージ カラー変更 太さ変更 画面クリア 保存
  • 4. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 4 作業内容の基本 • 線の描画 – 作成する基本的な内容は、 マウス(指)を動かしている時に、マウス座標に 線を描画する だけです。
  • 5. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 5 まずは、線を描画してみましょう。 ctx.beginPath(); ctx.moveTo(x, y); ctx.lineTo(x, y); ctx.stroke(); moveTo (0,0) lineTo (100,100) moveTo (300,100) lineTo (400, 0)
  • 6. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 6 ペイントの基本仕様 • Canvasのサイズ – 縦幅:画面縦幅の半分 – 横幅:画面横幅に合わせる • 背景用四角形の描画 – Canvasと同じサイズ、塗り白色の四角形を描画 • Canvas上の操作 – タッチ、マウスの両方で動作可 • ペンの初期値 – 太さ:2px – 色:赤色
  • 7. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 7 ペイントの基本仕様 • Canvasのサイズ – 縦幅:画面縦幅の半分 – 横幅:画面横幅に合わせる • 背景用四角形の描画 – Canvasと同じサイズ、塗り白色の四角形を描画 • Canvas上の操作 – タッチ、マウスの両方で動作可 • ペンの初期値 – 太さ:2px – 色:赤色 課題
  • 8. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 8 描画操作の流れ • touchstart / mousedown(画面をタッチ・マウスダウンした時) – 線の色や太さを指定する – タッチした座標で moveTo() – ? • touchmove / mousemove(画面上をドラッグした時) – 移動後の座標で lineTo() – stroke() する • touchend / mouseup(画面から指・マウスを離した時) – ?
  • 9. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 9 まずはPC用に マウス操作
  • 10. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 10 ユーザ入力による制御 • マウスなどのユーザ操作(イベント)の制御方法 記述例 対象要素.addEventListener( ’ユーザ操作’, function(e){ 実行したい内容; });
  • 11. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 11 マウス操作 • 主なマウスイベント(ユーザ操作) – click クリック – dblclick ダブルクリック – mouseout 要素上からマウスが離れた – mouseover 要素上にマウスが乗った – mousedown マウスボタン押した – mouseup マウスボタンを離した – mousemove マウスが動いた • マウス座標の取得(引数を利用) – e.pageX : マウスポインタがある X 座標 – e.pageY : マウスポインタがある Y 座標
  • 12. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 12 マウス操作 • 下記のイベントの違いを確認しよう – click クリック – mousedown マウスボタンを押した – mouseup マウスボタンを離した
  • 13. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 13 動きが変!
  • 14. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 14 描画操作の流れ • touchstart / mousedown(画面をタッチ・マウスダウンした時) – 線の色や太さを指定する – タッチした座標で moveTo() – 描画開始したことを覚える(フラグ) • touchmove / mousemove(画面上をドラッグした時) – 移動後の座標で lineTo() – stroke() する • touchend / mouseup(画面から指・マウスを離した時) – 描画終了したことを覚える(フラグ)
  • 15. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 15 マウスダウン直後か どうか判断する
  • 16. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 16 If文と変数で 実現できます
  • 17. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 17 この変数を フラグと言います
  • 18. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 18 スマホ用に タッチ操作
  • 19. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 19 ユーザ操作 • タッチ操作 – touchstart : タッチしたとき – touchmove : タッチしたまま動かしたとき – touchend : タッチ状態から離れたとき • タッチ座標 – event.changedTouches[0].pageX : タッチされている画面位置の X 座標 – event.changedTouches[0].pageY : タッチされている画面位置の Y 座標
  • 20. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 20 共通のコードで 動作確認したい
  • 21. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 21 jQueryを使って 簡略化
  • 22. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 22 今回の使い方 • onを使う – onを使うと、複数同時にイベントを設定できる セレクタ.on(’操作1 操作2’, function(e){ 実行したい内容; });
  • 23. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 23 タッチ環境かどうか確認 • 確認方法 • 結果 – true だとタッチ環境、false だとマウス環境 – 上記を判断して、JSの記述を分岐する ('ontouchstart' in window)
  • 24. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 24 スマホのブラウザで 操作してみよう
  • 25. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 25 注意点 • クリックやタッチは、他のコンテンツでも 反応 – PCの場合:<a>タグなど – スマフォの場合:ページスクロールなど • 回避方法 – e.preventDefault()
  • 26. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 26 タッチすると 画面が青くなる
  • 27. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 27 タッチすると画面が青い • Androidのブラウザの仕様 – CSSで解決 -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
  • 28. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 28 カラーの変更 • 赤、青、緑、黄、黒 – <ul><li>タグを利用して、CSSで背景色を指 定してボタンを作成 • 設定手段 – 各<li>タグを、touchstart / mousedown し たら、線の色を指定の色に変更する
  • 29. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 29 カラーの変更 • タッチ処理に、同じような設定が多くて 面倒 • 処理を一つにまとめたい – <li>タグの背景色をそのまま利用して、一つ の処理にまとめる
  • 30. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 30 ペンサイズの変更 • 線の太さを変更 – <ul><li>タグを利用して、2px、4px、6pxに 変更できるボタンを作成 • 設定手段 – 各<li>タグを、touchstart / mousedown し たら、線の太さを変更
  • 31. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 31 ペンサイズの変更 • タッチ処理に、同じような設定が多くて 面倒 • 処理を一つにまとめたい – <li>タグの文字をそのまま利用して、一つの 処理にまとめる
  • 32. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 32 クリアボタン • 画面を真っ白に変更 – <ul><li>タグを利用して、ボタンを作成 • 設定手段 – <li>タグを、touchstart / mousedown した ら、clearRectをして、白色の矩形を描画し 直す
  • 33. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 33 画像保存 • Canvasの問題点 – canvasのデータは、そのまま画像ファイルと して保存できない。 • 実現手段 – Imgタグとして表示して、ブラウザの機能で 保存する
  • 34. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 34 画像形式に変換 • canvasデータを画像形式に変換 – <ul><li>タグを利用してボタンを作成し、ボタ ンを押したら、変換したデータを<img>で表 示 • 変換方法 – canvas. toDataURL() • 画像のアドレスとして生成される • 生成されたアドレスを利用して、imgタグで表示 • HTML上に<div>タグを記述し、その中にimgタグ を追加する
  • 35. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 35 タグの生成方法 • タグの生成 オブジェクト名 = document.createElement(“タグ名”); • 属性の追加 オブジェクト名.属性名 = 値; • タグ内への文章追加 オブジェクト名. innerHTML = 値; • タグへのCSS指定 オブジェクト名. style.プロパティ = 値;
  • 36. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 36 タグの追加方法 • ID指定でのタグの追加 document.getElementById(“id名”).appendChild(オブジェクト名); • タグ指定でのタグ追加 var 親オブジェクト名 = document.getElementByTagName (“親タグ名”); 親オブジェクト名[何番目].appendChild (オブジェクト名);
  • 37. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 37 次回までの課題 • ボタンなどの見た目をデザインしてみよう • 可能であれば、オリジナル機能を追加してみよう。