| 情報学部 | 菅沼ホーム | 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 目次 | 基礎技術目次 | 索引 |