<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="com.oreilly.servlet.*"%>
<%@ page import="com.oreilly.servlet.multipart.*"%>
<%@ page import="javax.imageio.*"%>
<%@ page import="java.awt.image.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Color Image Processing - Server (RC 1)</title>
</head>
<body>
<%!////////////
// 전역 변수부 //
///////////
int inImage[][][];
int inH, inW;
int outImage[][][];
int outH, outW;
File inFp, outFp;
// Parameter Variable
String algo, para1, para2;
String inFname, outFname;
/////////////
//영상 처리 함수부 //
/////////////
public void reverseImage() {
// 반전 영상
// (중요!) 출력 영상의 크기 결정 (알고리즘에 의존)
outH = inH;
outW = inW;
outImage = new int[3][outH][outW];
// ** Image Processing Algorithm **
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < inH; i++) {
for (int k = 0; k < inW; k++) {
outImage[rgb][i][k] = 255 - inImage[rgb][i][k];
}
}
}
}
public void addImage() {
outH = inH;
outW = inW;
outImage = new int[3][outH][outW];
int value = Integer.parseInt(para1);
// * Image Processing Algorithm **
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < inH; i++) {
for (int k = 0; k < inW; k++) {
if (inImage[rgb][i][k] + value > 255) {
outImage[rgb][i][k] = 255;
} else if (inImage[rgb][i][k] + value < 0) {
outImage[rgb][i][k] = 0;
} else {
outImage[rgb][i][k] = inImage[rgb][i][k] + value;
}
}
}
}
}
public void grayImage() {
// 반전 영상
// (중요!) 출력 영상의 크기 결정 (알고리즘에 의존)
outH = inH;
outW = inW;
outImage = new int[3][outH][outW];
// ** Image Processing Algorithm **
for (int i = 0; i < inH; i++) {
for (int k = 0; k < inW; k++) {
int sumvalue = inImage[0][i][k] + inImage[1][i][k] + inImage[2][i][k];
int avgvalue = sumvalue / 3;
outImage[0][i][k] = avgvalue;
outImage[1][i][k] = avgvalue;
outImage[2][i][k] = avgvalue;
}
}
}
public void bwImage() {
// (중요!) 출력 영상의 크기 결정 (알고리즘에 의존)
outH = inH;
outW = inW;
outImage = new int[3][outH][outW];
// ** Image Processing Algorithm **
for (int i = 0; i < inH; i++) {
for (int k = 0; k < inW; k++) {
int sumvalue = inImage[0][i][k] + inImage[1][i][k] + inImage[2][i][k];
int avgvalue = sumvalue / 3;
if (avgvalue > 127) {
outImage[0][i][k] = 255;
outImage[1][i][k] = 255;
outImage[2][i][k] = 255;
} else {
outImage[0][i][k] = 0;
outImage[1][i][k] = 0;
outImage[2][i][k] = 0;
}
}
}
}
public void bwavgImage() {
outH = inH;
outW = inW;
int sum = 0;
int avg = 0;
int sumvalue = 0;
int avgvalue = 0;
outImage = new int[3][outH][outW];
for (int i = 0; i < inH; i++) {
for (int k = 0; k < inW; k++) {
sumvalue = inImage[0][i][k] + inImage[1][i][k] + inImage[2][i][k];
avgvalue = sumvalue / 3;
sum += avgvalue;
}
}
avg = sum / (inH * inW);
// * Image Processing Algorithm **
for (int i = 0; i < inH; i++) {
for (int k = 0; k < inW; k++) {
sumvalue = inImage[0][i][k] + inImage[1][i][k] + inImage[2][i][k];
avgvalue = sumvalue / 3;
if (avgvalue > avg) {
outImage[0][i][k] = 255;
outImage[1][i][k] = 255;
outImage[2][i][k] = 255;
} else {
outImage[0][i][k] = 0;
outImage[1][i][k] = 0;
outImage[2][i][k] = 0;
}
}
}
}
public void mulImage() {
outH = inH;
outW = inW;
outImage = new int[3][outH][outW];
int value = Integer.parseInt(para1);
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < inH; i++) {
for (int k = 0; k < inW; k++) {
if (inImage[rgb][i][k] * value > 255) {
outImage[rgb][i][k] = 255;
} else if (inImage[rgb][i][k] * value < 0) {
outImage[rgb][i][k] = 0;
} else {
outImage[rgb][i][k] = inImage[rgb][i][k] * value;
}
}
}
}
}
public void divImage() {
outH = inH;
outW = inW;
int value = 0;
outImage = new int[3][outH][outW];
value = Integer.parseInt(para1);
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < inH; i++) {
for (int k = 0; k < inW; k++) {
if (inImage[rgb][i][k] / value > 255) {
outImage[rgb][i][k] = 255;
} else if (inImage[rgb][i][k] / value < 0) {
outImage[rgb][i][k] = 0;
} else {
outImage[rgb][i][k] = inImage[rgb][i][k] / value;
}
}
}
}
}
public void lrImage() {
outH = inH;
outW = inW;
outImage = new int[3][outH][outW];
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < outH; i++) {
for (int k = 0; k < outW; k++) {
outImage[rgb][i][k] = inImage[rgb][inH - i - 1][k];
}
}
}
}
public void udImage() {
outH = inH;
outW = inW;
outImage = new int[3][outH][outW];
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < outH; i++) {
for (int k = 0; k < outW; k++) {
outImage[rgb][i][k] = inImage[rgb][i][inW - k - 1];
}
}
}
}
public void zoomoutImage() {
outH = inH;
outW = inW;
outImage = new int[3][outH][outW];
int value = Integer.parseInt(para1);
outH = (int) (inH / value);
outW = (int) (inW / value);
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < inH; i++) {
for (int k = 0; k < inW; k++) {
outImage[rgb][(int) (i / value)][(int) (k / value)] = inImage[rgb][i][k];
}
}
}
}
public void zoominImage() {
outH = inH;
outW = inW;
int value = Integer.parseInt(para1);
outH = (int) (inH * value);
outW = (int) (inW * value);
outImage = new int[3][outH][outW];
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < inH; i++) {
for (int k = 0; k < inW; k++) {
outImage[rgb][(int) (i * value)][(int) (k * value)] = inImage[rgb][i][k];
}
}
}
}
public void zoomin2Image() {
outH = inH;
outW = inW;
int value = Integer.parseInt(para1);
outH = (int) (inH * value);
outW = (int) (inW * value);
outImage = new int[3][outH][outW];
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < outH; i++) {
for (int k = 0; k < outW; k++) {
outImage[rgb][i][k] = inImage[rgb][(int) (i / value)][(int) (k / value)];
}
}
}
}
public void moveImage() {
outH = inH;
outW = inW;
int x = Integer.parseInt(para1);
int y = Integer.parseInt(para2);
outImage = new int[3][outH][outW];
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < inH - y; i++) {
for (int k = 0; k < inW - x; k++) {
outImage[rgb][i + y][k + x] = inImage[rgb][i][k];
}
}
}
}
public void gammaImage() {
outH = inH;
outW = inW;
int gamma = Integer.parseInt(para1);
outImage = new int[3][outH][outW];
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < inH; i++) {
for (int k = 0; k < inW; k++) {
outImage[rgb][i][k] = (int) (255 * Math.pow(inImage[rgb][i][k] / 255, gamma));
}
}
}
}
public void rotateImage() {
int value = Integer.parseInt(para1);
double radian = (value * Math.PI) / 180;
int centerH = inH / 2;
int centerW = inW / 2;
outH = inH;
outW = inW;
outImage = new int[3][outH][outW];
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < outH; i++) {
for (int k = 0; k < outW; k++) {
int newH = (int) ((k - centerH) * Math.cos(radian) + (i - centerW) * Math.sin(radian) + centerH);
int newW = (int) ((i - centerW) * Math.cos(radian) - (k - centerH) * Math.sin(radian) + centerW);
if ((0 <= newW && newW < inH) && (0 <= newH && newH < inW)) {
outImage[rgb][i][k] = inImage[rgb][newW][newH];
} else {
outImage[rgb][i][k] = 255;
}
}
}
}
}
public void rotate2Image() {
int value = Integer.parseInt(para1);
double radian = (value * Math.PI) / 180;
outH = (int) (Math.abs(Math.cos(radian) * inH) + Math.abs(Math.cos(((90 * Math.PI) / 180) - radian) * inW));
outW = (int) (Math.abs(Math.cos(radian) * inW) + Math.abs(Math.cos(((90 * Math.PI) / 180) - radian) * inH));
int centerH = outH / 2;
int centerW = outW / 2;
outImage = new int[3][outH][outW];
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < outH; i++) {
for (int k = 0; k < outW; k++) {
int newH = (int) ((k - centerH) * Math.cos(radian) + (i - centerW) * Math.sin(radian)
+ ((centerH / outW) * inW));
int newW = (int) ((i - centerW) * Math.cos(radian) - (k - centerH) * Math.sin(radian)
+ ((centerW / outH) * inH));
if (newH < 0 || newH >= outH) {
outImage[rgb][i][k] = 0;
} else if (newW < 0 || newW >= outW) {
outImage[rgb][i][k] = 0;
} else {
outImage[rgb][i][k] = inImage[rgb][newW][newH];
}
}
}
}
}
public void paracupImage() {
outH = inH;
outW = inW;
outImage = new int[3][outH][outW];
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < outH; i++) {
for (int k = 0; k < outW; k++) {
outImage[rgb][i][k] = (int)((255.0) * Math.pow((inImage[rgb][i][k] / 127.0 - 1), 2));
}
}
}
}
public void paracapImage() {
outH = inH;
outW = inW;
outImage = new int[3][outH][outW];
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < inH; i++) {
for (int k = 0; k < inW; k++) {
outImage[rgb][i][k] = (int)(255.0 - (255.0 * Math.pow((inImage[rgb][i][k] / 127.0 - 1), 2)));
}
}
}
}
public void embossImage() {
outH = inH;
outW = inW;
outImage = new int[3][outH][outW];
double mask[][] = { { -1.0, 0.0, 0.0 }, { 0.0, 0.0, 0.0 }, { 0.0, 0.0, 1.0 } };
double tmpInImage[][][] = new double[3][outH + 2][outW + 2];
int tmpOutImage[][][] = new int[3][outH][outW];
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < inH + 2; i++) {
for (int k = 0; k < inW + 2; k++) {
tmpInImage[rgb][i][k] = 127.0;
}
}
}
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < inH; i++) {
for (int k = 0; k < inW; k++) {
tmpInImage[rgb][i + 1][k + 1] = inImage[rgb][i][k];
}
}
}
//** Image Processing Algorithm **
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < inH; i++) {
for (int k = 0; k < inW; k++) {
double S = 0.0;
for (int m = 0; m < 3; m++) {
for (int n = 0; n < 3; n++) {
S += tmpInImage[rgb][i + m][k + n] * mask[m][n];
}
tmpOutImage[rgb][i][k] = (int) S;
}
}
}
}
//sum=1
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < outH; i++) {
for (int k = 0; k < outW; k++) {
tmpOutImage[rgb][i][k] += 127.0;
}
}
}
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < outH; i++) {
for (int k = 0; k < outW; k++) {
if (tmpOutImage[rgb][i][k] > 255.0) {
outImage[rgb][i][k] = 255;
} else if (tmpOutImage[rgb][i][k] < 0.0) {
outImage[rgb][i][k] = 0;
} else {
outImage[rgb][i][k] = (int) tmpOutImage[rgb][i][k];
}
}
}
}
}
public void blurImage() {
outH = inH;
outW = inW;
outImage = new int[3][outH][outW];
double mask[][] = { { 1.0 / 9, 1.0 / 9, 1.0 / 9 }, { 1.0 / 9, 1.0 / 9, 1.0 / 9 },
{ 1.0 / 9, 1.0 / 9, 1.0 / 9 } };
double tmpInImage[][][] = new double[3][outH + 2][outW + 2];
int tmpOutImage[][][] = new int[3][outH][outW];
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < inH + 2; i++) {
for (int k = 0; k < inW + 2; k++) {
tmpInImage[rgb][i][k] = 127.0;
}
}
}
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < inH; i++) {
for (int k = 0; k < inW; k++) {
tmpInImage[rgb][i + 1][k + 1] = inImage[rgb][i][k];
}
}
}
//** Image Processing Algorithm **
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < inH; i++) {
for (int k = 0; k < inW; k++) {
double S = 0.0;
for (int m = 0; m < 3; m++) {
for (int n = 0; n < 3; n++) {
S += tmpInImage[rgb][i + m][k + n] * mask[m][n];
}
tmpOutImage[rgb][i][k] = (int) S;
}
}
}
}
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < outH; i++) {
for (int k = 0; k < outW; k++) {
if (tmpOutImage[rgb][i][k] > 255.0) {
outImage[rgb][i][k] = 255;
} else if (tmpOutImage[rgb][i][k] < 0.0) {
outImage[rgb][i][k] = 0;
} else {
outImage[rgb][i][k] = (int) tmpOutImage[rgb][i][k];
}
}
}
}
}
public void sharpeImage() {
outH = inH;
outW = inW;
outImage = new int[3][outH][outW];
double mask[][] = { { -0.0, -1.0, 0.0 }, { -1.0, 5.0, -1.0 }, { 0.0, -1.0, 0.0 } };
double tmpInImage[][][] = new double[3][outH + 2][outW + 2];
int tmpOutImage[][][] = new int[3][outH][outW];
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < inH + 2; i++) {
for (int k = 0; k < inW + 2; k++) {
tmpInImage[rgb][i][k] = 127.0;
}
}
}
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < inH; i++) {
for (int k = 0; k < inW; k++) {
tmpInImage[rgb][i + 1][k + 1] = inImage[rgb][i][k];
}
}
}
//** Image Processing Algorithm **
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < inH; i++) {
for (int k = 0; k < inW; k++) {
double S = 0.0;
for (int m = 0; m < 3; m++) {
for (int n = 0; n < 3; n++) {
S += tmpInImage[rgb][i + m][k + n] * mask[m][n];
}
tmpOutImage[rgb][i][k] = (int) S;
}
}
}
}
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < outH; i++) {
for (int k = 0; k < outW; k++) {
if (tmpOutImage[rgb][i][k] > 255.0) {
outImage[rgb][i][k] = 255;
} else if (tmpOutImage[rgb][i][k] < 0.0) {
outImage[rgb][i][k] = 0;
} else {
outImage[rgb][i][k] = (int) tmpOutImage[rgb][i][k];
}
}
}
}
}
public void gaussianImage() {
outH = inH;
outW = inW;
outImage = new int[3][outH][outW];
double mask[][] = { { 1.0 / 16, 1.0 / 8, 1.0 / 16 },
{ 1.0 / 8, 1.0 / 4, 1.0 / 8 },
{ 1.0 / 16, 1.0 / 8, 1.0 / 16 } };
double tmpInImage[][][] = new double[3][outH + 2][outW + 2];
int tmpOutImage[][][] = new int[3][outH][outW];
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < inH + 2; i++) {
for (int k = 0; k < inW + 2; k++) {
tmpInImage[rgb][i][k] = 127.0;
}
}
}
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < inH; i++) {
for (int k = 0; k < inW; k++) {
tmpInImage[rgb][i + 1][k + 1] = inImage[rgb][i][k];
}
}
}
//** Image Processing Algorithm **
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < inH; i++) {
for (int k = 0; k < inW; k++) {
double S = 0.0;
for (int m = 0; m < 3; m++) {
for (int n = 0; n < 3; n++) {
S += tmpInImage[rgb][i + m][k + n] * mask[m][n];
}
tmpOutImage[rgb][i][k] = (int) S;
}
}
}
}
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < outH; i++) {
for (int k = 0; k < outW; k++) {
if (tmpOutImage[rgb][i][k] > 255.0) {
outImage[rgb][i][k] = 255;
} else if (tmpOutImage[rgb][i][k] < 0.0) {
outImage[rgb][i][k] = 0;
} else {
outImage[rgb][i][k] = (int) tmpOutImage[rgb][i][k];
}
}
}
}
}
public void endinImage() {
outH = inH;
outW = inW;
outImage = new int[3][outH][outW];
int LOW = inImage[0][0][0], HIGH = inImage[0][0][0];
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < inH; i++) {
for (int k = 0; k < inW; k++) {
if (LOW > inImage[rgb][i][k]) {
LOW = inImage[rgb][i][k];
}
if (HIGH < inImage[rgb][i][k]) {
HIGH = inImage[rgb][i][k];
}
}
}
}
LOW += 50;
HIGH += 50;
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < inH; i++) {
for (int k = 0; k < inW; k++) {
double out = (double) ((inImage[rgb][i][k] - LOW) * 255 / (HIGH - LOW));
if (out < 0.0) {
out = 0;
} else if (out > 255.0) {
out = 255;
} else {
out = (int) out;
}
outImage[rgb][i][k] = (int) out;
}
}
}
}
public void stretchImage() {
outH = inH;
outW = inW;
outImage = new int[3][outH][outW];
int LOW = inImage[0][0][0], HIGH = inImage[0][0][0];
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < inH; i++) {
for (int k = 0; k < inW; k++) {
if (LOW > inImage[rgb][i][k]) {
LOW = inImage[rgb][i][k];
}
if (HIGH < inImage[rgb][i][k]) {
HIGH = inImage[rgb][i][k];
}
}
}
}
for (int rgb = 0; rgb < 3; rgb++) {
for (int i = 0; i < inH; i++) {
for (int k = 0; k < inW; k++) {
double out = (double) ((inImage[rgb][i][k] - LOW) * 255 / (HIGH - LOW));
if (out < 0.0) {
out = 0;
} else if (out > 255.0) {
out = 255;
} else {
out = (int) out;
}
outImage[rgb][i][k] = (int) out;
}
}
}
}
public void equalizseImage(){
outH=inH;
outW=inW;
outImage = new int[3][outH][outW];
int histoR[] = new int[256];
int histoG[] = new int[256];
int histoB[] = new int[256];
for(int i=0;i<inH;i++)
for(int k=0;k<inW;k++){
histoR[inImage[0][i][k]]++;
histoG[inImage[1][i][k]]++;
histoB[inImage[2][i][k]]++;
}
int sumHistoR[] = new int[256];
int sumHistoG[] = new int[256];
int sumHistoB[] = new int[256];
for(int i=0;i<256;i++){
sumHistoR[i]=0;
sumHistoG[i]=0;
sumHistoB[i]=0;
}
int sumValueR=0;
int sumValueG=0;
int sumValueB=0;
for(int i=0;i<256;i++){
sumValueR += histoR[i];
sumHistoR[i]=sumValueR;
sumValueG += histoG[i];
sumHistoG[i]=sumValueG;
sumValueB += histoB[i];
sumHistoB[i]=sumValueB;
}
double normalHistoR[] = new double[256];
double normalHistoG[] = new double[256];
double normalHistoB[] = new double[256];
for(int i=0;i<256;i++){
normalHistoR[i]=0.0;
normalHistoG[i]=0.0;
normalHistoB[i]=0.0;
}
for(int i=0;i<256;i++){
double normalR = sumHistoR[i]*(1.0/(inH*inW))*255.0;
normalHistoR[i] = normalR;
double normalG = sumHistoG[i]*(1.0/(inH*inW))*255.0;
normalHistoG[i] = normalG;
double normalB = sumHistoB[i]*(1.0/(inH*inW))*255.0;
normalHistoB[i] = normalB;
}
for(int i=0;i<inH;i++){
for(int k=0;k<inW;k++){
outImage[0][i][k]=(int)normalHistoR[inImage[0][i][k]];
outImage[1][i][k]=(int)normalHistoG[inImage[1][i][k]];
outImage[2][i][k]=(int)normalHistoB[inImage[2][i][k]];
}
}
}
%>
<%
/////////////
// 메인 코드부 ///
////////////
// (0) 파라미터 넘겨 받기
MultipartRequest multi = new MultipartRequest(request, "c:/Upload/", 5 * 1024 * 1024, "UTF-8",
new DefaultFileRenamePolicy());
String tmp;
// 주의 ! 파라미터 순서가 반대
Enumeration params = multi.getParameterNames();
tmp = (String) params.nextElement();
para2 = multi.getParameter(tmp);
tmp = (String) params.nextElement();
para1 = multi.getParameter(tmp);
tmp = (String) params.nextElement();
algo = multi.getParameter(tmp);
// File
// 여러개 파일
Enumeration files = multi.getFileNames();
tmp = (String) files.nextElement(); // 첫 파일 한개
String filename = multi.getFilesystemName(tmp); // 파일명을 추출
// (1)입력 영상 파일 처리
inFp = new File("c:/Upload/" + filename);
BufferedImage bImage = ImageIO.read(inFp);
FileInputStream inFs = new FileInputStream(inFp.getPath());
// (2) 파일 -> 메모리
// (중요!) 입력 영상의 폭과 높이를 알아내야 함!
inW = bImage.getHeight();
inH = bImage.getWidth();
// 메모리 할당
inImage = new int[3][inH][inW];
// 읽어오기
for (int i = 0; i < inH; i++) {
for (int k = 0; k < inW; k++) {
int rgb = bImage.getRGB(i, k); // F377D6
int r = (rgb >> 16) & 0xFF; // >> 2Byte --> 0000FF --> F3
int g = (rgb >> 8) & 0xFF; // >> 1Byte --> 0000FF --> 77
int b = (rgb >> 0) & 0xFF; // >> 2Byte --> 0000FF --> D6
inImage[0][i][k] = r;
inImage[1][i][k] = g;
inImage[2][i][k] = b;
}
}
// Image Processing
switch (algo) {
case "101":
reverseImage();
break;
case "102":
addImage();
break;
case "103":
grayImage();
break;
case "104":
bwImage();
break;
case "105":
bwavgImage();
break;
case "106":
mulImage();
break;
case "107":
divImage();
break;
case "108":
lrImage();
break;
case "109":
udImage();
break;
case "110":
zoomoutImage();
break;
case "201":
zoominImage();
break;
case "202":
zoomin2Image();
break;
case "203":
moveImage();
break;
case "204":
gammaImage();
break;
case "205":
rotateImage();
break;
case "206":
rotate2Image();
break;
case "207":
paracupImage();
break;
case "208":
paracapImage();
break;
case "209":
embossImage();
break;
case "301":
blurImage();
break;
case "302":
sharpeImage();
break;
case "303":
gaussianImage();
break;
case "304":
endinImage();
break;
case "305":
stretchImage();
break;
case "306":
equalizseImage();
break;
}
//(4) 결과를 파일로 저장하기
outFp = new File("c:/out/out_" + filename);
BufferedImage oImage = new BufferedImage(outH, outW, BufferedImage.TYPE_INT_RGB); // Empty Image
//Memory -> File
for (int i = 0; i < outH; i++) {
for (int k = 0; k < outW; k++) {
int px = 0;
int r = outImage[0][i][k]; // F3
int g = outImage[1][i][k]; // 77
int b = outImage[2][i][k]; // D6
px = px | (r << 16); // 000000 | (F30000) -> F30000
px = px | (g << 8); // F30000 | (007700) -> F37700
px = px | (b << 0); // F37700 | (0000D6) -> F377D6
oImage.setRGB(i, k, px);
}
}
ImageIO.write(oImage, "jpg", outFp);
out.println("<h1>" + filename + " 영상 처리 완료!! </h1>");
String url = "<p><h2><a href = 'http://192.168.56.101:8080/";
url += "GrayImageProcessing/download.jsp?file=";
url += "out_" + filename + "'> !! 다운로드 !! </a></h2>";
out.println(url);
%>
</body>
</html>