| 情報学部 | 菅沼ホーム | JavaScript 目次 | 基礎技術目次 | 索引 | 
01	<!DOCTYPE HTML>
02	<HTML>
03	<HEAD>
04		<TITLE>ビットマップ</TITLE>
05		<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
06		<META NAME=viewport CONTENT="width=device-width, initial-scale=1">
07		<LINK REL="stylesheet" TYPE="text/css" HREF="../../master.css">
08		<SCRIPT TYPE="text/javascript">
09			function draw() {
10				let canvas    = document.getElementById('canvas_e');
11				canvas.width  = 270;   // キャンバス要素の幅
12				canvas.height = 130;   // キャンバス要素の高さ
13				let ctx       = canvas.getContext('2d');
14						// 塗りつぶした矩形
15				ctx.beginPath();
16				ctx.fillStyle = "rgb(0, 255, 0)";
17				ctx.fillRect(20, 15, 100, 100);
18				ctx.fill();
19						// ピクセル操作による矩形
20				let width = 100;
21				let height = 100;
22				let img = ctx.createImageData(width, height);
23				for (let i1 = 0; i1 < height; i1++) {
24					for (let i2 = 0; i2 < width; i2++) {
25						img.data[(i1 * width + i2) * 4] = 0;   // 赤
26						img.data[(i1 * width + i2) * 4 + 1] = 255;   // 緑
27						img.data[(i1 * width + i2) * 4 + 2] = 0;   // 青
28						img.data[(i1 * width + i2) * 4 + 3] = 255;   // 透明度(不透明)
29					}
30				}
31				ctx.putImageData(img, 150, 15);
32			}
33		</SCRIPT>
34	</HEAD>
35	<BODY CLASS="white" STYLE="text-align: center" onLoad="draw()">
36		<H1>ビットマップ</H1>
37		<CANVAS ID="canvas_e" STYLE="background-color: #eeffee;" WIDTH="270" HEIGHT="130"></CANVAS>
38	</BODY>
39	</HTML>
			
	a = new Array();
	a = new Array(100);
	a = new Array("abc", "efg", "hij");				
01	<!DOCTYPE HTML>
02	<HTML>
03	<HEAD>
04		<TITLE>外部画像</TITLE>
05		<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
06		<META NAME=viewport CONTENT="width=device-width, initial-scale=1">
07		<LINK REL="stylesheet" TYPE="text/css" HREF="../../master.css">
08		<SCRIPT TYPE="text/javascript">
09			function draw() {
10				let canvas    = document.getElementById('canvas_e');
11				canvas.width  = 270;   // キャンバス要素の幅
12				canvas.height = 130;   // キャンバス要素の高さ
13				let ctx       = canvas.getContext('2d');
14						// 画像の読み込み
15				let img = new Image();
16				img.src = "rect.gif";
17						// 塗りつぶした矩形
18				ctx.beginPath();
19				ctx.fillStyle = "rgb(0, 255, 0)";
20				ctx.fillRect(20, 15, 100, 100);
21				ctx.fill();
22						// 外部画像
23				let width = 100;
24				let height = 100;
25				ctx.drawImage(img, 150, 15, width, height);
26			}
27		</SCRIPT>
28	</HEAD>
29	<BODY CLASS="white" STYLE="text-align: center" onLoad="draw()">
30		<H1>外部画像</H1>
31		<CANVAS ID="canvas_e" STYLE="background-color: #eeffee;" WIDTH="270" HEIGHT="130"></CANVAS>
32	</BODY>
33	</HTML>
			
01	<!DOCTYPE HTML>
02	<HTML>
03	<HEAD>
04		<TITLE>ぼかし</TITLE>
05		<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
06		<META NAME=viewport CONTENT="width=device-width, initial-scale=1">
07		<LINK REL="stylesheet" TYPE="text/css" HREF="../../master.css">
08		<SCRIPT TYPE="text/javascript">
09			function draw() {
10				let canvas    = document.getElementById('canvas_e');
11				canvas.width  = 270;   // キャンバス要素の幅
12				canvas.height = 130;   // キャンバス要素の高さ
13				let ctx       = canvas.getContext('2d');
14						// 元の画像
15				ctx.beginPath();
16				ctx.fillStyle = "rgb(0, 0, 255)";
17				ctx.fillRect(20, 15, 100, 100);
18				ctx.fill();
19						// ぼかし
20				let img1 = ctx.getImageData(17, 12, 106, 106);
21				let mx = new Array();   // フィルタ
22				for (let i1 = 0; i1 < 7; i1++) {   // フィルタの高さが 7
23					mx[i1] = new Array();
24					for (let i2 = 0; i2 < 7; i2++)   // フィルタの幅が 7
25						mx[i1][i2] = 1.0 / 49.0;
26				}
27				let img2 = filter(ctx, img1, 106, 106, mx, 7, 7);
28				ctx.putImageData(img2, 147, 12);
29			}
30			/****************************************/
31			/* フィルタ処理                         */
32			/*      ctx : コンテキスト              */
33			/*      im1 : 元の画像                  */
34			/*      width : 画像の幅                */
35			/*      height : 画像の高さ             */
36			/*      mx : フィルタ                   */
37			/*      w : フィルタの幅(奇数)        */
38			/*      h : フィルタの高さ(奇数)      */
39			/*      return : フィルタを適用した画像 */
40			/****************************************/
41			function filter(ctx, im1, width, height, mx, w, h)
42			{
43				let im2 = ctx.createImageData(width, height);
44				let whf = Math.floor(w / 2);
45				let hhf = Math.floor(h / 2);
46				for (let i1 = 0; i1 < height; i1++) {
47					for (let i2 = 0; i2 < width; i2++) {
48						let v0 = 0.0, v1 = 0.0, v2 = 0.0, v3 = 0.0;
49						let k = (i1 * width + i2) * 4;
50						for (let i3 = 0; i3 < h; i3++) {
51							let k1 = i1 - hhf + i3;
52							if (k1 < 0)
53								k1 = 0;
54							for (let i4 = 0; i4 < w; i4++) {
55								let k2 = i2 - whf + i4;
56								if (k2 < 0)
57									k2 = 0;
58								let kk = (k1 * width + k2) * 4;
59								v0 += im1.data[kk] * mx[i3][i4];
60								v1 += im1.data[kk+1] * mx[i3][i4];
61								v2 += im1.data[kk+2] * mx[i3][i4];
62								v3 += im1.data[kk+3] * mx[i3][i4];
63							}
64						}
65						if (v0 < 0)
66							v0 = 0;
67						else if (v0 > 255)
68							v0 = 255;
69						if (v1 < 0)
70							v1 = 0;
71						else if (v1 > 255)
72							v1 = 255;
73						if (v2 < 0)
74							v2 = 0;
75						else if (v2 > 255)
76							v2 = 255;
77						if (v3 < 0)
78							v3 = 0;
79						else if (v3 > 255)
80							v3 = 255;
81						im2.data[k]     = Math.floor(v0);
82						im2.data[k + 1] = Math.floor(v1);
83						im2.data[k + 2] = Math.floor(v2);
84						im2.data[k + 3] = Math.floor(v3);
85					}
86				}
87				return im2;
88			}
89		</SCRIPT>
90	</HEAD>
91	<BODY CLASS="white" STYLE="text-align: center" onLoad="draw()">
92		<H1>ぼかし</H1>
93		<CANVAS ID="canvas_e" STYLE="background-color: #eeffee;" WIDTH="270" HEIGHT="130"></CANVAS>
94	</BODY>
95	</HTML>
			

/* ぼかし */ 1/9, 1/9, 1/9, 1/9, 1/9, 1/9, 1/9, 1/9, 1/9, /* シャープ */ -1, -1, -1, -1, 9, -1, -1, -1, -1, /* エンボス(立体視) */ 7, 0, 0, 0, -3, 0, 0, 0, -3, /* エッジ */ -1, 0, 1, -2, 0, 2, -1, 0, 1,
let a = new Array(2); // let a = new Array(); でも可 for (let i1 = 0; i1 < 2; i1++) a[i1] = new Array(3);
let a = new Array(2); // let a = new Array(); でも可 a[0] = new Array(1, 2, 3); a[1] = new Array(4, 5, 6);

<!DOCTYPE HTML>
<HTML>
<HEAD>
	<TITLE>ぼかし</TITLE>
	<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
	<META NAME=viewport CONTENT="width=device-width, initial-scale=1">
	<LINK REL="stylesheet" TYPE="text/css" HREF="../../master.css">
	<SCRIPT TYPE="text/javascript">
		function draw() {
			let canvas    = document.getElementById('canvas_e');
			canvas.width  = 460;   // キャンバス要素の幅
			canvas.height = 240;   // キャンバス要素の高さ
			let ctx       = canvas.getContext('2d');
					// 画像の読み込み
			let img = new Image();
			img.src = "hana.gif";
					// 元の画像
			let width = 194;
			let height = 203;
			ctx.drawImage(img, 20, 20, width, height);
					// ぼかし
			let img1 = ctx.getImageData(20, 20, width, height);
			let mx = new Array();   // フィルタ
			for (let i1 = 0; i1 < 7; i1++) {   // フィルタの高さが 7
				mx[i1] = new Array();
				for (let i2 = 0; i2 < 7; i2++)   // フィルタの幅が 7
					mx[i1][i2] = 1.0 / 49.0;
			}
			let img2 = filter(ctx, img1, width, height, mx, 7, 7);
			ctx.putImageData(img2, 240, 20);
		}
		/****************************************/
		/* フィルタ処理                         */
		/*      ctx : コンテキスト              */
		/*      im1 : 元の画像                  */
		/*      width : 画像の幅                */
		/*      height : 画像の高さ             */
		/*      mx : フィルタ                   */
		/*      w : フィルタの幅(奇数)        */
		/*      h : フィルタの高さ(奇数)      */
		/*      return : フィルタを適用した画像 */
		/****************************************/
		function filter(ctx, im1, width, height, mx, w, h)
		{
			let im2 = ctx.createImageData(width, height);
			let whf = Math.floor(w / 2);
			let hhf = Math.floor(h / 2);
			for (let i1 = 0; i1 < height; i1++) {
				for (let i2 = 0; i2 < width; i2++) {
					let v0 = 0.0, v1 = 0.0, v2 = 0.0, v3 = 0.0;
					let k = (i1 * width + i2) * 4;
					for (let i3 = 0; i3 < h; i3++) {
						k1 = i1 - hhf + i3;
						if (k1 < 0)
							k1 = 0;
						for (let i4 = 0; i4 < w; i4++) {
							k2 = i2 - whf + i4;
							if (k2 < 0)
								k2 = 0;
							let kk = (k1 * width + k2) * 4;
							v0 += im1.data[kk] * mx[i3][i4];
							v1 += im1.data[kk+1] * mx[i3][i4];
							v2 += im1.data[kk+2] * mx[i3][i4];
							v3 += im1.data[kk+3] * mx[i3][i4];
						}
					}
					if (v0 < 0)
						v0 = 0;
					else if (v0 > 255)
						v0 = 255;
					if (v1 < 0)
						v1 = 0;
					else if (v1 > 255)
						v1 = 255;
					if (v2 < 0)
						v2 = 0;
					else if (v2 > 255)
						v2 = 255;
					if (v3 < 0)
						v3 = 0;
					else if (v3 > 255)
						v3 = 255;
					im2.data[k]     = Math.floor(v0);
					im2.data[k + 1] = Math.floor(v1);
					im2.data[k + 2] = Math.floor(v2);
					im2.data[k + 3] = Math.floor(v3);
				}
			}
			return im2;
		}
	</SCRIPT>
</HEAD>
<BODY CLASS="white" STYLE="text-align: center" onLoad="draw()">
	<H1>ぼかし</H1>
	<CANVAS ID="canvas_e" STYLE="background-color: #eeffee;" WIDTH="460" HEIGHT="240"></CANVAS>
</BODY>
</HTML>
			
| 情報学部 | 菅沼ホーム | JavaScript 目次 | 基礎技術目次 | 索引 |