*์๊ณ ๋ฆฌ์ฆ ์ฐ์ต์ฉ์ผ๋ก rgb๋ฅผ ์์์ ์ซ์(math.random()*256)๋ก ๋์ฒดํจ.
*์ ์ฌ๊ฐํ์ธ GrayScale์ด๋ฏธ์ง๋ผ ๊ฐ์ ํจ.
1. ์ด๋ฏธ์ง ์๋ณธ ๊ทธ๋๋ก
//ํจ์ ์ ์ธ๋ถ
function display(image, height, width) {
for(var i=0; i<height; i++) {
for (var k=0; k<width; k++) {
var space = "";
if (image[i][k] < 10)
space = "00";
else if (image[i][k] <100)
space = "0";
document.write(space + image[i][k] + " ");
}
document.write("<br>");
}
document.write("<br><br>");
}
์ด๋ฏธ์ง ํ์ผ์ ํฌ๊ธฐ๋ 5~10 ์ค์์ ๋๋คํ๊ฒ ์ ํ๊ฒ ํ์๋ค.
//์ด๋ฏธ์งํ์ผ ์ ํํ๋ฉด ํฌ๊ธฐ๊ฐ ๋ค ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋๋คํ๊ฒ ํ์
inHeight = inWidth = Math.floor(Math.random() * 6 + 5); //5~10ํฌ๊ธฐ ์์
//๋ฉ๋ชจ๋ฆฌ ํ๋ณด
inImage = new Array(inHeight);
for (i=0; i<inHeight; i++) {
inImage[i] = new Array(inWidth);
}
//ํ์ผ์์ ์ด๋ฏธ์ง ๋ก๋ฉ
for (i=0; i<inHeight; i++) {
for (k=0; k<inWidth; k++) {
//์ฌ๊ธฐ์ [i][k] ๊ฐ์ ์ฝ๊ธฐ
inImage[i][k] = Math.floor(Math.random() * 256);
}
}
display(inImage, inHeight, inWidth);
//๋ฉ์ธ ์ฝ๋๋ถ
display(inImage, inHeight, inWidth);
2. ์ด๋ฏธ์ง ๋ฐ๊ธฐ ์กฐ์
์๋ณธ ์ด๋ฏธ์ง๋ฅผ ๋ณด์กดํ๊ธฐ ์ํด inImage์ outImage๋ฅผ ๋ถ๋ฆฌํ์๊ณ , ๊ฐ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํด ์ฃผ์๋ค.
outImage๋ ๋ฐ๋ณต๋์ด ์ฌ์ฉํ ๊ฒ์ด๋ฏ๋ก ๋ฐ๋ก ํจ์๋ฅผ ๋ง๋ค์ด์คฌ๋ค.
function out(height, width) {
outHeight = height;
outWidth = width;
outImage = new Array(height);
for(i=0; i<height; i++) {
outImage[i] = new Array(width);
}
}
ํญ์ 0๊ณผ 255 ์ฌ์ด์ฌ์ผ ํ๋ฏ๋ก ์กฐ๊ฑด์ ์ ์ฉ์์ผ ์ค๋ค.
function brightness(image, height, width, number) {
document.write("==image brightness " + number + "==<br>");
out(height, width);
for (i=0; i<height; i++) {
for (k=0; k<width; k++) {
if (number>0) {
if (image[i][k] + number > 255) {
outImage[i][k] = 255;
} else {
outImage[i][k] = image[i][k] + number;
}
} else {
if (image[i][k] + number < 0) {
outImage[i][k] = 0;
} else {
outImage[i][k] = image[i][k] + number;
}
}
}
}
display(outImage, outHeight, outWidth);
}
//๋ฉ์ธ ์ฝ๋๋ถ
brightness(inImage, inHeight, inWidth, 100);
brightness(inImage, inHeight, inWidth, -100);
3. ์ด๋ฏธ์ง ํ๋ฐฑ์ฒ๋ฆฌ
์๋ rgb ์ธ ๊ฐ์ด ์์ผ๋ฉด r=g=b์ธ ์ํ๊ฐ ํ๋ฐฑ(์ฑ๋๊ฐ 0) ์ฒ๋ฆฌ๋๋๋ฐ, ๊ฐ์ด ํ๋์ด๋ฏ๋ก 127.5๋ณด๋ค ํฌ๋ฉด 255, 127.5๋ณด๋ค ์์ผ๋ฉด 0์ผ๋ก ๋ํ๋ด๊ธฐ๋ก ํ๋ค.
function blackWhite(image, height, width) {
document.write("==image only with black and white==<br>");
out(height, width);
for (i=0; i<height; i++) {
for (k=0; k<width; k++) {
if (image[i][k] > (0 + 255)/2) {
outImage[i][k] = 255;
} else {
outImage[i][k] = 0;
}
}
}
display(outImage, outHeight, outWidth);
}
//๋ฉ์ธ ์ฝ๋๋ถ
blackWhite(inImage, inHeight, inWidth);
4. ์ด๋ฏธ์ง ์์ ๋ฐ์ ์ํค๊ธฐ
๊ฐ๋จํ๊ฒ 255์์ ์ด์ ๊ฐ์ ๋นผ์ฃผ๋ฉด ๋๋ค.
function colorInversion(image, height, width) {
document.write("==image color inversion==<br>");
out(height, width);
for (i=0; i<height; i++) {
for (k=0; k<width; k++) {
outImage[i][k] = 255 - image[i][k];
}
}
display(outImage, outHeight, outWidth);
}
//๋ฉ์ธ ์ฝ๋๋ถ
colorInversion(inImage, inHeight, inWidth);
5. ์ด๋ฏธ์ง ๋ฏธ๋ฌ๋ง์ํค๊ธฐ (์ข์ฐ๋ฐ์ ๊ณผ ์ํ๋ฐ์ )
function rightToLeft(image, height, width) {
document.write("==image right to left mirroring==<br>");
out(height, width);
outImage.fil
for (i=0; i<height; i++) {
for (k=0; k<width; k++) {
outImage[i][k] = image[i][width - k -1];
}
}
display(outImage, outHeight, outWidth);
}
function upToDown(image, height, width) {
document.write("==image up to down mirroring==<br>");
out(height, width);
for (i=0; i<height; i++) {
for (k=0; k<width; k++) {
outImage[i][k] = image[height - i - 1][k];
}
}
display(outImage, outHeight, outWidth);
}
//๋ฉ์ธ ์ฝ๋๋ถ
rightToLeft(inImage, inHeight, inWidth);
upToDown(inImage, inHeight, inWidth);
6. ์ด๋ฏธ์ง ํ์ (90๋, 180๋, 270๋)
function rotation_90(image, height, width) {
document.write("==image 90 degree clockwise==<br>");
out(height, width);
for (i=0; i<height; i++) {
for (k=0; k<width; k++) {
outImage[i][k] = image[height-1-k][i];
}
}
display(outImage, outHeight, outWidth);
}
function rotation_180(image, height, width) {
document.write("==image 180 degree clockwise==<br>");
out(height, width);
for (i=0; i<height; i++) {
for (k=0; k<width; k++) {
outImage[i][k] = image[height - 1 - i][width - 1 -k];
}
}
display(outImage, outHeight, outWidth);
}
function rotation_270(image, height, width) {
document.write("==image 270 degree clockwise==<br>");
out(height, width);
for (i=0; i<height; i++) {
for (k=0; k<width; k++) {
outImage[i][k] = image[k][width - 1 - i];
}
}
display(outImage, outHeight, outWidth);
}
//๋ฉ์ธ ์ฝ๋๋ถ
rotation_90(inImage, inHeight, inWidth);
rotation_180(inImage, inHeight, inWidth);
rotation_270(inImage, inHeight, inWidth);
7. ์ด๋ฏธ์ง 2๋ฐฐ ์ถ์ํ๊ธฐ
์ด๋ฏธ์ง ์ถ์๋ ์ผ๋จ ๋ฐฐ์ด์ ํ๋ ฌ ํฌ๊ธฐ๋ฅผ 1/2๋ฐฐ๋ก ์ค์ฌ์ผ ํ๋ฏ๋ก, outImage ๋ฐฐ์ด๋ 1/2๋ฐฐ์ธ ํฌ๊ธฐ๋ก ๋ง๋ค์ด์ค๋ค. (ํ์๋ผ๋ฉด ๊ทธ๋ฅ ์ ์ผ ๋์ ํ๋ ฌ์ ์ ๊ฑฐํ์๋ค.)
๋ํ, ์ถ์๋ ๋ 2x2 ํฌ๊ธฐ์ ๋ฐฐ์ด์ด 1x1ํฌ๊ธฐ๋ก ๋๊ธฐ ๋๋ฌธ์ ๋ค ๊ฐ์ value๊ฐ์ ํ๊ท ์ ๋ด์ด ์๋ก์ด ํ๋์ value๋ฅผ ์ง์ ํ์๋ค.
ํ์ ์ง์ ๋๋๋ ๋ถ๋ถ์ ๋ชซ์ ๊ตฌํ๋ ํจ์์ธ parseInt()๋ก ๋์ฒดํ๋ฉด ๋ ๊ฐ๋จํ๊ฒ ์ค์ผ ์ ์๋ค.
function reduceImage(image, height, width) {
document.write("==image x2 reduction==<br>");
var h, w = 0;
if (height % 2 == 0) {
h = height/2;
w = width/2;
} else {
h = (height-1)/2;
w = (width-1)/2;
}
out( h, w);
for (i=0; i<h; i++) {
for (k=0; k<w; k++) {
outImage[i][k] = Math.round((image[i*2+1][k*2+1] +image[i*2+1][k*2]+image[i*2][k*2+1]+image[i*2][k*2])/4);
}
}
display(outImage, outHeight, outWidth);
}
//๋ฉ์ธ ์ฝ๋๋ถ
reduceImage(inImage, inHeight, inWidth);
8. ์ด๋ฏธ์ง 2๋ฐฐ ํ๋ํ๊ธฐ
์ฌ์ค ์ฒ์์ ๋ค์๋ ์๊ฐ์ ์ฃผ๋ณ ๋ฐฐ์ด์ ํ๊ท ์ ํ๋ํ๋ ๊ตฌํด์ ๋ฐฐ์ด์ ์ฌ์ด์ฆ๊ฐ ํ๋์ฉ ์ค๊ณ , while๋ฌธ์ ํ์ถํ ๋๊น์ง ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ์ํ ๋๊น์ง ์ค์ด๋ ๊ฒ์ผ๋ก ํ๊ณ ์ถ์๋๋ฐ, ๊ฐ์ด ๋ง์ง ์๋ค ๋ณด๋ ์ด ์์ ์์๋ ๋ถ๊ฐ๋ฅํ๋ค๊ณ ํ๋จํ์๋ค.
๊ทธ๋์ ๊ทธ๋ฅ ํ๋์ value๋ฅผ 2x2 ์ด 4๊ฐ์ value๋ก ๋๋ฆฌ๋ ์์ผ๋ก ํ๋๋ฅผ ํ ๊น ํ๋ค๊ฐ ์ฃผ๋ณ 4๊ฐ์ ํ๊ท ์ผ๋ก ํด๋ณด๊ณ ์ถ์ด์ ํด๋ณด์๋ค. ๊ทผ๋ฐ ํ๊ณ ๋ณด๋ ๋ฑํ ์๋ฏธ๊ฐ ์์๋์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค.. ๊ฐ์ด ๊ฐ๋จํ ๋ ์ด๊ฒ์ ๊ฒ ํด๋ณด๋ ๊ฑฐ์ ์๋ฏธ๋ฅผ ๋๊ธฐ๋ก ํ๋ค ใ
ใ
function expandImage(image, height, width) {
document.write("==image x2 expansion==<br>");
var h = height * 2;
var w = width * 2;
out( h, w);
for (i=0; i<h; i++) {
for (k=0; k<w; k++) {
if ((i <= 0) || (i >= h-1)){
if ((k <= 0) || (k >= w-1)) {
outImage[i][k] = Math.round((image[parseInt(i/2)][parseInt(k/2)] +0+0+0)/4);
} else {
outImage[i][k] = Math.round((image[parseInt(i/2)][parseInt((k+1)/2)] +image[parseInt(i/2)][parseInt((k+1)/2)]+0+0)/4);
}
}
else if ((k <= 0) || (k >= w-1)) {
outImage[i][k] = Math.round((image[parseInt((i+1)/2)][parseInt(k/2)] +image[parseInt((i+1)/2)-1][parseInt(k/2)]+0+0)/4);
} else {
outImage[i][k] = Math.round((image[parseInt((i+1)/2)][parseInt((k+1)/2)] +image[parseInt((i+1)/2)-1][parseInt((k+1)/2)]+image[parseInt((i+1)/2)][parseInt((k+1)/2)-1]+image[parseInt((i+1)/2)-1][parseInt((k+1)/2)-1])/4);
}
}
}
display(outImage, h, w);
}
//๋ฉ์ธ ์ฝ๋๋ถ
expandImage(inImage, inHeight, inWidth);
9. ์ด๋ฏธ์ง 45๋ ํ์ ํ๊ธฐ
์ด๋ฐ ์์ผ๋ก ๋ฐฐ์ด์ ๋ค์ด์๋ชฌ๋์ฒ๋ผ ๋๋ฆฌ๊ณ , ๋๋จธ์ง์๋ 0 ๊ฐ์ ๋ฃ๋ ๋ฐฐ์ด์ ๋ง๋ค์ด๋ณด๋ ค๊ณ ๊ท์น์ ์ฐพ์๋ค. (์ด๊ฑด ๊ท์น์ ์ฐพ๋ ๊ฒ ๋ ์ค๋ ๊ฑธ๋ ธ๋ค)
์ด๋ฒ์ ๋น์๋ฆฌ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ outImage ๋ฐฐ์ด์ ๋จผ์ 0์ผ๋ก ์ด๊ธฐํ๋ฅผ ์์ผฐ๋ค. ๊ทธ ํ์ ์ฐพ์ ๊ท์น์ ์ ์ฉ์์ผฐ๋ค.
function diamond(image, height, width) {
document.write("==make it diamond==<br>");
var h = height * 2 -1;
var w = width * 2 -1;
outHeight = h;
outWidth = w;
outImage = new Array(h);
for(i=0; i<h; i++) {
outImage[i] = new Array(w).fill(0);
}
for (i=0; i<height; i++) {
for (k=0; k<width; k++) {
outImage[i + k][k + width -1 - i] = image[i][k];
}
}
display(outImage, outHeight, outWidth);
}