LISTING PROGRAM
1.
Form Menu Utama
using System;
using System.Collections.Generic; using System.Drawing;
using System.Windows.Forms; namespace KompresiCitra {
/// <summary>
/// Description of MainForm. /// </summary>
public partial class MainForm : Form {
public MainForm() {
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
}
void KOMPRESIToolStripMenuItemClick(object sender, EventArgs e) {
Kompresi k = new Kompresi(); k.Show();
this.Hide(); }
void DEKOMPRESIToolStripMenuItemClick(object sender, EventArgs e) {
Dekompresi k = new Dekompresi(); k.Show();
this.Hide(); }
void ABOUTToolStripMenuItem1Click(object sender, EventArgs e) {
About k = new About(); k.Show();
this.Hide(); }
void ABOUTToolStripMenuItemClick(object sender, EventArgs e) {
Help k = new Help(); k.Show();
this.Hide(); }
}
2.
Form Kompresi
namespace KompresiCitra {
/// <summary>
/// Description of Kompresi. /// </summary>
public partial class Kompresi : Form {
Image file; Bitmap bmp;
double fileLength; Color p;
List<int> ch = new List<int>(); List<int> hs = new List<int>(); List<int> hs2 = new List<int>();
public static String[] edc; public static String[] lv;
int[] fr;
int width,height,proses;
public Kompresi() {
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
}
void Button1Click(object sender, EventArgs e) {
OpenFileDialog open = new OpenFileDialog();
open.Filter = "GIF ( *.gif)|*.gif| BITMAP ( *.bmp)|*.bmp"; if (open.ShowDialog() == DialogResult.OK)
{
string metode =
open.FileName.Substring(open.FileName.Length-3, 3); if(metode == "bmp"){
file = Image.FromFile(open.FileName); bmp = new Bitmap(open.FileName); pictureBox1.Image = file;
textBox1.Text = open.FileName;
textBox2.Text = bmp.Height.ToString() + " x " +bmp.Width.ToString();
width = bmp.Width; height = bmp.Height;
fileLength
= new FileInfo(open.FileName).Length * 1.0 /1024;
textBox3.Text = fileLength.ToString()+" kb"; }
else if(metode == "gif") {
byte[] ir = File.ReadAllBytes(open.FileName); Image i = Image.FromStream(new MemoryStream(ir)); bmp = new Bitmap(new Bitmap(i));
pictureBox1.Image = bmp;
textBox1.Text = open.FileName;
textBox2.Text = bmp.Height.ToString() + " x " +bmp.Width.ToString();
width = bmp.Width; height = bmp.Height;
fileLength
= new FileInfo(open.FileName).Length * 1.0 /1024;
textBox3.Text = fileLength.ToString()+" kb";
} } }
bool cek(int x) {
for(int i=0; i<ch.Count; i++) {
if(ch[i] == x) return false; }
return true; }
void freq(int x) {
for(int i=0; i<ch.Count; i++) {
if(ch[i] == x) fr[i]++; }
}
int indeks(int x) {
for(int i=0; i<ch.Count; i++) {
if(ch[i]==x) return i; }
return 0; }
void init() {
ch.Clear();
for(int i=0; i<height; i++) {
for(int j=0; j<width; j++) {
p = bmp.GetPixel(i,j); if(cek(p.R))
ch.Add(p.R); }
}
fr = new int[ch.Count];
for(int i=0; i<ch.Count;i++) fr[i] = 0;
for(int i=0; i<height; i++) {
p = bmp.GetPixel(i,j); freq(p.R);
} }
Insertion(); }
void Button2Click(object sender, EventArgs e) {
edc_proses(); lv_proses(); }
string DecToBin(int dec) {
StringBuilder bin = new StringBuilder(); int r = dec % 2;
bin.Insert(0, r); dec = dec / 2; while (dec != 0) {
r = dec % 2; bin.Insert(0, r); dec = dec / 2; }
return bin.ToString(); }
string Reverse(String sb) {
char[] charArray = sb.ToCharArray(); Array.Reverse(charArray);
return new String(charArray); }
int BinToDec(String bin) {
StringBuilder sb = new StringBuilder(Reverse(bin)); int n = 1;
int dec = 0;
for (int i = 0; i < sb.Length; i++) {
dec = dec + (int)(Char.GetNumericValue(sb[i])) * n; n = n * 2;
}
return dec; }
void Encode(String stb) {
for (int i = 0; i < stb.Length; i+= 8) {
String x = stb.Substring(i, 8); int y = BinToDec(x);
hs.Add(y); }
}
void Encode2(String stb) {
for (int i = 0; i < stb.Length; i+= 8) {
String x = stb.Substring(i, 8); int y = BinToDec(x);
}
long ukuran() {
long temp = 0;
for(int i=0; i<hs.Count; i++) temp+=hs[i].ToString().Length; return temp;
}
long ukuran2() {
long temp = 0;
for(int i=0; i<hs2.Count; i++) temp+=hs2[i].ToString().Length; return temp;
}
} }
}
3.
Form Dekompresi
namespace KompresiCitra {
/// <summary>
/// Description of Dekompresi. /// </summary>
public partial class Dekompresi : Form {
public Dekompresi() {
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
}
int w ,h; Bitmap bmp;
List<int> ch = new List<int>(); List<int> hs = new List<int>(); List<int> pic = new List<int>();
public String[] edc; public String[] lv;
string metode;
void Button1Click(object sender, EventArgs e) {
OpenFileDialog open = new OpenFileDialog();
open.Filter = "Compressed Files( *.edc)|*.edc|Compressed Files( *.lv)|*.lv";
if (open.ShowDialog() == DialogResult.OK) {
ch.Clear(); hs.Clear(); pic.Clear();
open.FileName.Substring(open.FileName.Length-2, 2); if(metode == "dc")
{
string namaa =
open.FileName.Substring(0, open.FileName.Length- 4) + "e.dat"; FileStream fstreamm
= new FileStream(namaa, FileMode.Open,FileAccess.ReadWrite); StreamReader sreaderr
= new StreamReader(fstreamm);
sreaderr.BaseStream.Seek(0, SeekOrigin.Begin); string keterangan = sreaderr.ReadLine(); string[] info = new string[3];
info = keterangan.Split('~'); w = int.Parse(info[0]); h = int.Parse(info[1]); bmp = new Bitmap(w,h); int n = int.Parse(info[2]);
keterangan = sreaderr.ReadLine(); info = new string[n];
info = keterangan.Split('~'); for(int i = 0;i<n;i++)
ch.Add(int.Parse(info[i]));
keterangan = sreaderr.ReadLine(); info = new string[n];
edc = new string[n];
info = keterangan.Split('~'); for(int i = 0;i<n;i++)
edc[i] = info[i];
sreaderr.Close();
string temp; string nama =
open.FileName.Substring(0, open.FileName.Length); FileStream fstream
= new FileStream(nama, FileMode.Open,FileAccess.ReadWrite); StreamReader sreader
= new StreamReader(fstream);
sreader.BaseStream.Seek(0, SeekOrigin.Begin); while (sreader.Peek() >= 0)
{
temp = sreader.ReadLine(); hs.Add(int.Parse(temp)); }
sreader.Close(); }
else if(metode == "lv") {
string namaa =
open.FileName.Substring(0, open.FileName.Length- 3) + "l.dat"; FileStream fstreamm
= new FileStream(namaa, FileMode.Open,FileAccess.ReadWrite); StreamReader sreaderr
= new StreamReader(fstreamm);
sreaderr.BaseStream.Seek(0, SeekOrigin.Begin); string keterangan = sreaderr.ReadLine(); string[] info = new string[3];
info = keterangan.Split('~'); w = int.Parse(info[0]); h = int.Parse(info[1]); bmp = new Bitmap(w,h); int n = int.Parse(info[2]);
info = keterangan.Split('~'); for(int i = 0;i<n;i++)
ch.Add(int.Parse(info[i]));
keterangan = sreaderr.ReadLine(); info = new string[n];
lv = new string[n];
info = keterangan.Split('~'); for(int i = 0;i<n;i++)
lv[i] = info[i];
sreaderr.Close();
string temp; string nama =
open.FileName.Substring(0, open.FileName.Length); FileStream fstream
= new FileStream(nama, FileMode.Open,FileAccess.ReadWrite); StreamReader sreader
= new StreamReader(fstream);
sreader.BaseStream.Seek(0, SeekOrigin.Begin); while (sreader.Peek() >= 0)
{
temp = sreader.ReadLine(); hs.Add(int.Parse(temp)); }
sreader.Close(); }
} }
string DecToBin(int dec) {
StringBuilder bin = new StringBuilder(); int r = dec % 2;
bin.Insert(0, r); dec = dec / 2; while (dec != 0) {
r = dec % 2; bin.Insert(0, r); dec = dec / 2; }
return bin.ToString(); }
string Reverse(String sb) {
char[] charArray = sb.ToCharArray(); Array.Reverse(charArray);
return new String(charArray); }
int BinToDec(String bin) {
StringBuilder sb = new StringBuilder(Reverse(bin)); int n = 1;
int dec = 0;
for (int i = 0; i < sb.Length; i++) {
dec = dec + (int)(Char.GetNumericValue(sb[i])) * n; n = n * 2;
}
return dec; }
{
int k = 0;
for(int i=0; i<h; i++) {
for(int j=0; j<w; j++) {
bmp.SetPixel(i,j,Color.FromArgb(255,pic[k],pic[k], pic[k]));
k++; }
}
pictureBox1.Image = bmp; }
void Button2Click(object sender, EventArgs e) {
if(metode == "dc") {
Stopwatch watch = new Stopwatch();// running time watch.Start();
String dc = Decode(); Decompress(dc); Gambar(); watch.Stop(); textBox2.Text =
Math.Round(Convert.ToDecimal(watch.ElapsedMilliseconds)/1000,4).ToStri ng()+" ms";
}
else if(metode == "lv") {
Stopwatch watch = new Stopwatch();// running time watch.Start();
String lv = Decode(); Decompress2(lv); Gambar();
watch.Stop(); textBox2.Text =
Math.Round(Convert.ToDecimal(watch.ElapsedMilliseconds)/1000,4).ToStri ng()+" ms";
} }
void Button3Click(object sender, EventArgs e) {
SaveFileDialog save = new SaveFileDialog();
save.Filter = "GIF( *.gif)|*.gif|BMP( *.bmp)|*.bmp"; if (save.ShowDialog() == DialogResult.OK)
{
string metode =
save.FileName.Substring(save.FileName.Length-3, 3); if(metode == "bmp")
{
bmp.Save(save.FileName,System.Drawing.Imaging. ImageFormat.Bmp);
}
else if(metode == "gif") {
bmp.Save(save.FileName,System.Drawing.Imaging. ImageFormat.Gif);
} } }