Jumat, 21 November 2008

Proses Filtering [PCD]

Source code Filtering menggunakan Class. Di dalam Formnya hanya memanggil class yang telah disediakan. Berikut code proses filtering yang berada di dalam class tersebut.

here is the code:

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Windows.Forms;

namespace Filtering
{
class Class1
{
public Bitmap proses(Bitmap b,String sProses)
{
Color pixelColor;
int[] pixelR = new int[9];
int[] pixelG = new int[9];
int[] pixelB = new int[9];
int nRed, nGreen, nBlue;
Bitmap img2 = new Bitmap(b);
float[] m = new float[9];
int swap;

for (int x = 1; x <= img2.Width - 2; x++)
{
for (int y = 1; y <= img2.Height - 2; y++)
{
//i[0]
pixelColor = b.GetPixel(x - 1, y - 1);
pixelR[0] = pixelColor.R;
pixelG[0] = pixelColor.G;
pixelB[0] = pixelColor.B;
//i[1]
pixelColor = b.GetPixel(x, y - 1);
pixelR[1] = pixelColor.R;
pixelG[1] = pixelColor.G;
pixelB[1] = pixelColor.B;
//i[2]
pixelColor = b.GetPixel(x + 1, y - 1);
pixelR[2] = pixelColor.R;
pixelG[2] = pixelColor.G;
pixelB[2] = pixelColor.B;
//i[3]
pixelColor = b.GetPixel(x - 1, y);
pixelR[3] = pixelColor.R;
pixelG[3] = pixelColor.G;
pixelB[3] = pixelColor.B;
//i[4]
pixelColor = b.GetPixel(x, y);
pixelR[4] = pixelColor.R;
pixelG[4] = pixelColor.G;
pixelB[4] = pixelColor.B;
//i[5]
pixelColor = b.GetPixel(x + 1, y);
pixelR[5] = pixelColor.R;
pixelG[5] = pixelColor.G;
pixelB[5] = pixelColor.B;
//i[6]
pixelColor = b.GetPixel(x - 1, y + 1);
pixelR[6] = pixelColor.R;
pixelG[6] = pixelColor.G;
pixelB[6] = pixelColor.B;
//i[7]
pixelColor = b.GetPixel(x, y + 1);
pixelR[7] = pixelColor.R;
pixelG[7] = pixelColor.G;
pixelB[7] = pixelColor.B;
//i[8]
pixelColor = b.GetPixel(x + 1, y + 1);
pixelR[8] = pixelColor.R;
pixelG[8] = pixelColor.G;
pixelB[8] = pixelColor.B;

for (int i = 0; i <= 8; i++)
{
for (int j = 0; j <= 8; j++)
{
if (pixelR[j] > pixelR[i])
{
swap = pixelR[i];
pixelR[i] = pixelR[j];
pixelR[j] = swap;
}

if (pixelG[j] > pixelG[i])
{
swap = pixelG[i];
pixelG[i] = pixelG[j];
pixelG[j] = swap;
}

if (pixelB[j] > pixelB[i])
{
swap = pixelB[i];
pixelB[i] = pixelB[j];
pixelB[j] = swap;
}
}
}

//seleksi average
if (sProses == "average")
{
nRed = Convert.ToInt32((pixelR[0] + pixelR[1] + pixelR[2] + pixelR[3] + pixelR[4] + pixelR[5] + pixelR[6] + pixelR[7] + pixelR[8]) / 9);
nGreen = Convert.ToInt32((pixelG[0] + pixelG[1] + pixelG[2] + pixelG[3] + pixelG[4] + pixelG[5] + pixelG[6] + pixelG[7] + pixelG[8]) / 9);
nBlue = Convert.ToInt32((pixelB[0] + pixelB[1] + pixelB[2] + pixelB[3] + pixelB[4] + pixelB[5] + pixelB[6] + pixelB[7] + pixelB[8]) / 9);

if (nRed > 255)
nRed = 255;
else if (nRed < 0)
nRed = 0;

if (nGreen > 255)
nGreen = 255;
else if (nGreen < 0)
nGreen = 0;

if (nBlue > 255)
nBlue = 255;
else if (nBlue < 0)
nBlue = 0;

Color newPixelColor = Color.FromArgb(nRed, nGreen, nBlue);
img2.SetPixel(x, y, newPixelColor);
}

if (sProses == "median")
{
Color newPixelColor = Color.FromArgb(pixelR[4], pixelG[4], pixelB[4]);
img2.SetPixel(x, y, newPixelColor);
}

if (sProses == "max")
{
Color newPixelColor = Color.FromArgb(pixelR[8], pixelG[8], pixelB[8]);
img2.SetPixel(x, y, newPixelColor);
}

if (sProses == "min")
{
Color newPixelColor = Color.FromArgb(pixelR[0], pixelG[0], pixelB[0]);
img2.SetPixel(x, y, newPixelColor);
}
}
}
return img2;
}
}
}

Tidak ada komentar: