JavaScript๋ก ์์์ฒ๋ฆฌ ์ํํธ์จ์ด ๋ง๋ค๊ธฐ (Beta ver.): RAW ์ด๋ฏธ์ง ํ์ผ ๋ถ๋ฌ์ค๊ธฐ
Alpha ๋ฒ์ ์์๋ ๋์๋ก ํ๋ค๋ฉด, ์ด๋ฒ์๋ ํ ๋จ๊ณ๋ฅผ ์ ํด์ ์ง์ง ์ด๋ฏธ์ง์ ์์์ฒ๋ฆฌ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํด๋ณด๊ณ ์ ํ๋ค. ์ผ๋ฐ ํ์ผ(BMP, JPG, PNG, TIF, GIF ๋ฑ)์ ์ด๋ฏธ์ง์ฒ๋ฆฌํ๊ธฐ ๋ง์ด ์ด๋ ค์ด๋ฐ, RAW ์ด๋ฏธ
hanav.tistory.com
0. ํ ์ค๋นํ๊ธฐ
์ฐ์ ์ ๋ ฅ๋ ์ด๋ฏธ์ง(inImage)์ ์์์ฒ๋ฆฌ๋ฅผ ๊ฑฐ์น ์ด๋ฏธ์ง(outImage)๋ฅผ ๋ถ๋ฆฌํด ์ค ํ์๊ฐ ์์ผ๋ฏ๋ก, out์ ๋ํ ๋ณ์์ ํจ์๋ ์ ๋ถ ์ง์ ํด ์ค๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ํ ํจ๊ณผ๋ฅผ ์ ์ฉ์ํฌ ์ ์๋ selectํญ์ ๋ง๋ค์ด์ฃผ๊ณ , ์คํ๋ ์ ์๋๋ก selectAlgorithm ํจ์๋ ๋ง๋ค์ด์ค๋ค.
๊ทธ๋ฆฌ๊ณ outImage๋ displayImage ๋์ด์ผ ํ๋ฏ๋ก ๊ธฐ์กด ํจ์์ ์ถ๊ฐํด ์ค๋ค.
ํจ๊ณผ๋ฅผ ์ ์ฉํ ๋๋ง๋ค ๋งค๋ฒ outImage ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํด์ผ ํ๋๋ฐ, ์ด๋ฅผ ํธํ๊ฒ ํจ์๋ก ๋ง๋ค์ด๋์.
ํจ๊ณผ๋ ๋๋ถ๋ถ ์ด์ ๊ธ(๋ฐ ๋งํฌ)๊ณผ ๋ก์ง์ด ๊ฐ์ ์ค๋ช ์ ์๋ตํ์์ต๋๋ค.
Alpha๋ฒ์ ์ฐธ๊ณ ํ๊ธฐ: https://hanav.tistory.com/130
JavaScript๋ก ์์์ฒ๋ฆฌ ์ํํธ์จ์ด ๋ง๋ค๊ธฐ (Alpha ver.) : ์ด๋ฏธ์ง ๋ฐ๊ธฐ์กฐ์ , ์์ ๋ณ๊ฒฝ, ๋ฏธ๋ฌ๋ง, ํ์ ,
*์๊ณ ๋ฆฌ์ฆ ์ฐ์ต์ฉ์ผ๋ก rgb๋ฅผ ์์์ ์ซ์(math.random()*256)๋ก ๋์ฒดํจ. *์ ์ฌ๊ฐํ์ธ GrayScale์ด๋ฏธ์ง๋ผ ๊ฐ์ ํจ. 1. ์ด๋ฏธ์ง ์๋ณธ ๊ทธ๋๋ก //ํจ์ ์ ์ธ๋ถ function display(image, height, width) { for(var i=0; i
hanav.tistory.com
1. ์๋ณธ ์ด๋ฏธ์ง ๊ทธ๋๋ก ๋ณด๊ธฐ
inImage์ outImage๊ฐ ๊ฐ์ ๊ฒฝ์ฐ์ด๋ค.
function equalImage() {
out(inH, inW);
for(var i=0; i<outH; i++) {
for (var k=0; k<outW; k++) {
outImage[i][k] = inImage[i][k];
}
}
displayImage();
}
2. ๋ฐ๊ธฐ ์กฐ์ ํ๊ธฐ
๋ฐ๊ธฐ๋ ๊ฐ์ ์ ๋ ฅ๋ฐ์ (prompt์ฌ์ฉํ๊ธฐ) ๊ทธ๋งํผ ๋ํด์ค๋ค.
function brightness() {
out(inH, inW);
for(var i=0; i<outH; i++)
outImage[i] = new Array(outW);
var value = parseInt(prompt("๊ฐ์ ์
๋ ฅํ์ธ์", "50"));
for(var i=0; i<inH; i++) {
for (var k=0; k<inW; k++) {
if (inImage[i][k] + value < 0 )
outImage[i][k] = 0;
else if (inImage[i][k] + value > 255 )
outImage[i][k] = 255;
else
outImage[i][k] = inImage[i][k]+value;
}
}
displayImage();
}
3. ๊ณ ๋๋น
function blackWhite() {
out(inH, inW);
for (i=0; i<outH; i++) {
for (k=0; k<outW; k++) {
if (inImage[i][k] > (0 + 255)/2) {
outImage[i][k] = 255;
} else {
outImage[i][k] = 0;
}
}
}
displayImage();
}
4. ์์ ๋ฐ์
function reverseImage() {
out(inH, inW);
for(var i=0; i<inH; i++) {
for (var k=0; k<inW; k++) {
outImage[i][k] = 255 - inImage[i][k];
}
}
displayImage();
}
5. ์ข์ฐ/์ํ๋ฐ์
function rightToLeft() {
out(inH, inW);
for (i=0; i<outH; i++) {
for (k=0; k<outW; k++) {
outImage[i][k] = inImage[i][outW - k -1];
}
}
displayImage();
}
function upToDown() {
out(inH, inW);
for (i=0; i<outH; i++) {
for (k=0; k<outW; k++) {
outImage[i][k] = inImage[outH - i - 1][k];
}
}
displayImage();
}
6. 90๋/180๋/270๋ ํ์
function rotation_90() {
out(inH, inW);
for (i=0; i<outH; i++) {
for (k=0; k<outW; k++) {
outImage[i][k] = inImage[inH-1-k][i];
}
}
displayImage();
}
function rotation_180() {
out(inH, inW);
for (i=0; i<outH; i++) {
for (k=0; k<outW; k++) {
outImage[i][k] = inImage[inH-1-i][inW - 1 - k];
}
}
displayImage();
}
function rotation_270() {
out(inH, inW);
for (i=0; i<outH; i++) {
for (k=0; k<outW; k++) {
outImage[i][k] = inImage[k][inW-1-i];
}
}
displayImage();
}
7. ์ด๋ฏธ์ง ์ถ์ํ๊ธฐ
function reduceImage() {
out(parseInt(inH/2), parseInt(inW/2));
for (i=0; i<outH; i++) {
for (k=0; k<outW; k++) {
outImage[i][k] = (inImage[i*2+1][k*2+1] +inImage[i*2+1][k*2]+inImage[i*2][k*2+1]+inImage[i*2][k*2])/4;
}
}
displayImage();
}
8. ์ด๋ฏธ์ง ํ๋ํ๊ธฐ
์ฌ์ค ์ ๋ฒ์ ํ ์๊ณ ๋ฆฌ์ฆ๋๋ก ํ๋ ๊ฑด ์ต๊ทผ์ ์ด์ ๋ณด๊ฐ๋ฒ(๊ทธ๋ฅ *4 ํ๋ ๊ฑฐ)์ด๋ ๋ค๋ฅผ ๊ฒ ์์ด์ ํ์ง๊ฐ์ ์ ์ํด ์ข ๋ ์๊ฐ์ค์ด๋ค.
function expandImage() {
out(inH*2, inW*2);
for (i=0; i<outH; i++) {
for (k=0; k<outW; k++) {
outImage[i][k] = inImage[parseInt(i/2)][parseInt(k/2)];
}
}
}
}
displayImage();
}
9. ๋ธ๋ฌํจ๊ณผ(์ถ๊ฐ)
๊ณ์ ํ๊ท ์ ๋ด๋ค๋ณด๋ ์ฃผ๋ณ ๊ฐ๋ค์ ๋ํด์ ๋๋๋ฉด ๋ช
๋๊ฐ ๋น์ทํด์ง๋ ๋ธ๋ฌ ํจ๊ณผ๋ฅผ ๋ผ ์ ์์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ฌธ๋ ๋ค์๋ค.
์ฒ์์๋ ์ฃผ๋ณ 3x3 ๋ฐฐ์ด์ ํ๊ท ๊ฐ์ผ๋ก ํ๋๋ฐ, ํจ๊ณผ๊ฐ ์๊ฐ๋ณด๋ค ์์์ 5x5๋ฐฐ์ด๋ก ๋ฐ๊ฟจ๋ค.
function BlurImage() {
out(inH, inW);
for (i=2; i<outH-2; i++) {
for (k=1; k<outW-2; k++) {
outImage[i][k] = (inImage[i-2][k-2] + inImage[i-2][k-1] + inImage[i-2][k] + inImage[i-2][k+1] + inImage[i-2][k+2] +
inImage[i-1][k-2] + inImage[i-1][k-1] + inImage[i-1][k] + inImage[i-1][k+1] + inImage[i-1][k+2] +
inImage[i][k-2] + inImage[i][k-1] + inImage[i][k] + inImage[i][k+1] + inImage[i][k+2] +
inImage[i+1][k-2] + inImage[i+1][k-1] + inImage[i+1][k] + inImage[i+1][k+1] + inImage[i+1][k+2] +
inImage[i+2][k-2] + inImage[i+2][k-1] + inImage[i+2][k] + inImage[i+2][k+1] + inImage[i+2][k+2])/25;
}
}
displayImage();
}