Monday 11 March 2013

Open & Save File Dialog - Image Processing menggunakan C#



Baiklah kawan, saat sedang menganggur lebih baik mencoba-coba project SMK dulu biar nggak lupa. Tutorial kali ini adalah tentang bagaimana memanfaatkan Open File Dialog dan Save File Dialog pada Microsoft Visual Studio 2010 menggunakan bahasa C# (C Sharp).
Kenapa C#? karena bahasa ini cukup robust jika digunakan sebagai materi kita kali yang ada hubungannya dengan image processing. Ini adalah tulisan pertama yang akan menjelaskan secara lengkap Image Processing secara lengkap, pada tahap Dasar.

Silakan mengikuti :)

Definisi Citra
  • Citra (image) = gambar pada bidang 2 dimensi.
  • Citra (ditinjau dari sudut pandang matematis) = fungsi
  • yang kontinu dari intensitas cahaya pada bidang 2 dimensi.
  • Sumber cahaya menerangi objek,dipantulkan kembali dan di tangkap oleh alat-alat optik adalah pengertian dari Citra

Definisi Pengolahan Citra


Pengolahan Citra = memproses suatu citra sehingga menghasilkan citra yang sesuai dengan keinginan kita atau kualitasnya menjadi lebih baik.

Untuk mengetahui dasar-dasar dari pengolahan citra, kita bisa menggunakan bahasa apapun. Namun yang direkomendasikan adalah menggunakan bahasa C, C#, atau Java karena bahasa tersebut sangat handal dalam melakukan pemrograman tingkat rendah.

Dalam penjelasan di bawah ini aplikasi yang digunakan adalah Microsoft Visual Studio 2010 Ultimate Edition. VS2010 ini menggunakan .NET Framework versi 4 yang harus terinstal di komputer kita.

Langkah pertama adalah buka Visual Studio 2010. Pilih Other Languages -> Visual C# -> Windows Forms Application.

Ini adalah screenshootnya :




Maka akan muncul form kosong yang akan tampak seperti gambar di bawah ini. Di sebelah kiri adalah Toolbox yang berisi alat-alat atau komponen yang bisa dipasang ke dalam form.





Komponen yang akan ditambahkan adalah dua buah Command Button masing-masing berlabel Load Image dan Save Image. Kemudian satu komponen PictureBox dengan mode gambar StrecthImage. Yang artinya adalah bahwa pengaturan ini akan mengakibatkan setiap gambar yang ditampilkan akan memenuhi ruang PictureBox. Yang terakhir adalah komponen openFileDialog dan saveFileDialog.



Source Code :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Imaging;

namespace WindowsFormImage1
{
    public partial class Form1 : Form
    {
        Image File;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void btnLoad_Click(object sender, EventArgs e)
        {
            DialogResult d = openFileDialog1.ShowDialog();
            if(d == DialogResult.OK)
            {
                File = Image.FromFile(openFileDialog1.FileName);
                pictureBox1.Image = File;
            }
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            DialogResult d = saveFileDialog1.ShowDialog();
            if(d == DialogResult.OK)
            {
                File.Save(saveFileDialog1.FileName,ImageFormat.Jpeg);
            }
        }

    }
}



Analisa Source Code

o Source code yang paling atas diawali dengan kata using adalah metode untuk mengimport object lain yang akan digunakan di dalam aplikasi ini

o Namespace digunakan untuk memberikan nama project sehingga project akan lebih mudah untuk diidentifikasi

o Di dalam class Form1, terdapat sebuah variabel bertipe object Image dengan nama File yang bersifat Global variabel yang bisa diakses oleh class tersebut. Variabel inilah yang akan sering digunakan nantinya misalnya untuk membuka atau menyimpan gambar menjadi file bertipe JPEG

o Ada sebuah constructor dari Form1 yang memanggil fungsi InitializeComponent(), isinya adalah untuk menginisialisasi objek apa saja yang ada di dalam project tersebut. Dalam kasus ini objek yang diinisialisasi adalah form, commandButton, pictureBox, termasuk ukurannya, penempatannya dalam koordinat x dan y. Intinya adalah tentang bagaimana form ini ditampilkan.

o Form1_Load kosong karena kita masih belum membutuhkan baris source code pada bagian ini

o Fungsi yang tidak mengembalikan nilai btnLoad_Click adalah fungsi yang akan dijalankan ketika tombol dengan nama btnLoad diberikan event click. Terbukti fungsi ini memiliki 2 parameter sender dan EventArgs. Di dalamnya terdapat variabel d bertipe DialogResult. D ini akan diisi dengan status pemilihan yang diberikan oleh user melalui object openFileDialog1.ShowDialog(). Jadi file gambarnya sendiri akan disimpan ke dalam object openFileDialog1. Kemudian diberikan pengecekan, jika d adalah "pilihan user berupa tombol" OK, maka variabel File bertipe Image yang tadinya kosong akan diisi dengan FileName dari objek openFileDialog1. Kemudian gambar dalam variabel File tersebut akan ditampilkan di pictureBox1.

o Fungsi btnSave_Click adalah fungsi yang akan dijalan ketika tombol dengan nama btnSave diberikan event click. Hampir sama dengan tombol openDialog di atas, tetapi fungsi ini menggunakan fungsi ShowDialog dari objek saveFileDialog1 untuk menampilkan dialog Save As. Jika user menekan tombol OK, maka file gambar tadi akan di-save dengan nama saveDialog1.FileName dan mempunyai format Jpeg.


PictureBox SizeMode

Dalam banyak kasus, saat kita memasukkan gambar ke dalam PictureBox, gambar bisa saja tidak pas dengan ukuran rasio PictureBox. Hal ini disebabkan oleh dua sebab : gambar mempunyai perbedaan ukuran dengan PictureBox, dan atau gambar mempunyai dimensi atau rasio yang berbeda. Dari kedua sebab di atas, programmer harus bisa mengatur ukuran gambar agar enak dilihat.

1. Normal

Tidak ada perubahan yang dilakukan pada size gambar atau size PictureBox. Visual Studio menempatkan gambar ke dalam PictureBox dengan metode upper-left. Yaitu letak pixel paling atas dan paling kiri berada pada tempat yang sama. Jadi misalnya gambarnya lebih besar dari PictureBox, maka otomatis gambar pada kanan bawah akan terpotong menyesuaikan dimensi PictureBox.

2. AutoSize

Kali ini PictureBox yang menyesuaikan dengan ukuran gambar. Jadi Visual Studio akan menambah atau mengurangi ukuran PictureBox dan disamakan persis dengan ukuran gambar. Semua bagian gambar pasti akan terlihat dan fit dengan tepat dalam PictureBox.

3. StretchImage

Menyamakan rasio gambar dengan objek PictureBox, bisa dengan memampatkan lebar atau tinggi. Mungkin gambar yang dihasilkan bisa menyebabkan distorsi untuk membuat gambar yang mempunyai rasio yang sama dengan PictureBox. Makanya untuk memilih jenis SizeMode ini sangat disarankan untuk memilih gambar yang mempunyai perkiraan dimensi yang sama (atau paling tidak mempunyai aspek rasio yang sama).

4. CenterImage

Tidak ada perubahan terhadap ukuran gambar. Visual Studio menempatkan gambar tepat di tengah-tengah PictureBox, dengan Align rata tengah relatif terhadap PictureBox.

5. Zoom

Ukurang gambar mungkin diperbesar atau diperkecil sehingga fit ke dalam PictureBox. Penyamaan bisa kiri, kanan, atas, atau bawah tergantung dimensi gambar dan PictureBox. Jika gambar dan PictureBox tidak mempunyai proporsi yang sama, gambar tidak akan mengisi seluruh bagian PictureBox.


Uji Coba Program

Untuk menguji program apakah sudah berhasil atau belum, caranya adalah dengan mengklik tombol segitiga berwarna hijau (run) atau dengan menekan F5. Pada saat dijalankan, tampilan yang akan muncul adalah dua tombol tanpa ada gambar. Karena gambar yang akan ditampilkan adalah gambar dari hasil openFileDialog yang sudah dipasang tadi.








Kemudian sesaat setelah tombol Save diklik, kita bisa membuktikan apakah gambar sudah tersimpan. Cek di folder tempat penyimpanan yang sudah ditentukan. Screenshoot di bawah ini membuktikan bahwa gambar sudah berhasil di-Save ke dalam format JPEG.




Jenis-jenis Kompresi Gambar

A. JPEG

JPEG didirikan oleh komite Joint Photographic Expert Group yang mengeluarkan standar pada tahun 1992. JPEG menetapkan standar yaitu codec. Codec menjelaskan tentang bagaimana sebuah gambar dikompresi menjadi aliran byte dan decompressed kembali menjadi sebuah gambar serta digunakan sebagai streaming untuk file yang berisi.

Algoritma kompresi JPEG merupakan yang terbaik untuk foto-foto dan lukisan pemandangan yang realistis dengan variasi warna yang halus dan nada. Pada web, JPEG sangat populer dimana bandwidth digunakan untuk foto yang penting. JPEG / Exif juga format yang paling umum untuk kamera digital. Kompresi yang umum pada JPEG adalah lossy, yaitu beberapa kualitas visual akan hilang dalam proses dan tidak dapat dikembalikan. Terdapat juga penjalinan "Progresip JPEG" format, pada data yang dikompresi dalam melewati beberapa detail yang makin tinggi.

Metode kompresi lossy data dari encoding ketika diterapkan untuk input yang memiliki 24 bit per pixel (masing-masing delapan untuk merah, hijau dan biru). Metode pertama dari metode kompresi losy data adalah transformasi warna, adapun langkah pertama adalah – langkahnya adalah mengubah gambar dari RGB menjadi berbagai warna ruang (YCbCr). Y (kecerahan dan piksel), Cb dan Cr (Chrominance / biru dan merah komponen). Ruang warna YCbCr konversi memungkinkan kompresi lebih besar tanpa perceptual signifikan terhadap kualitas gambar (atau lebih besar perceptual kualitas gambar yang sama untuk kompresi).

Langkah selanjutnya adalah untuk mengurangi resolusi spasial dari komponen Cb dan Cr disebut dengan downsampling atau subsampling chroma.

B. BMP

Bitmap atau BMP adalah representasi citra grafis dari susunan titik yang tersimpan di memori komputer. Ukuran untuk n-bit (2n warna) bitmap dalam byte dapat dihitung: ukuran file BMP, dimana tinggi dan lebar dalam pixel.

Kerapatan titik-titik tersebut dinamakan resolusi, yang menunjukkan ketajaman gambar yang ditampilkan serta ditunjukkan dengan jumlah baris dan kolom misalnya 1024x768. komputer menerjemahkan bitmap menjadi pixel pada layar agar dapat menampilkan citra bitmap pada monitor serta menerjemahkan bitmap menjadi titik tinta pada printer agar dapat mencetak citra bitmap.

C. GIF

GIF (Graphics Interchange Format) adalah bitmap format gambar yang diperkenalkan oleh CompuServe pada tahun 1987. Format ini mendukung hingga 8 bit per pixel yang memungkinkan satu gambar untuk referensi palet sampai 256 pilihan warna berbeda dari 24-bit warna RGB ruang. GIF juga mendukung animasi yang memungkinkan setiap frame terpisah dari 256 palet warna.

GIF merupakan gambar yang menggunakan kompresi Lempel-Ziv-Welch (LZW), lossless data compression adalah teknik untuk mengurangi ukuran file tanpa menurunkan kualitas visual, Dipatenkan pada tahun 1985. Perizinan atas kesepakatan antara pemegang hak paten, Unisys dan CompuServe di tahun 1994 menjadi sebuah kontroversi namun karena terinspirasi pembangunan Portable Jaringan Graphics (PNG) standar maka kontroversi pun berakhir.

Keuntungan penggunaan GIF diantaranya cocok sebagai tajam seni baris (seperti logo) dengan sejumlah warna, menyimpan rendah warna sprite data permainan, animasi kecil dan resolusi rendah-klip film sedangkan kerugian penggunaannya adalah tidak umum digunakan sebagai format untuk fotografi digital. GIF adalah palet berdasarkan apapun palet pilihan dari salah satu jutaan corak dalam bingkai 256.

D. TIFF

TIFF (Tagged Image File Format) adalah format file untuk menyimpan gambar, foto dan seni baris. Pada awalnya dibuat oleh perusahaan Aldus yang kemudian disebut "desktop publishing", format TIFF secara luas didukung dengan gambar-aplikasi manipulasi serta penerbitan dan tata letak halaman aplikasi, oleh scanning, Faxing, Pengolah kata, karakter optik pengakuan dan aplikasi lainnya. Sekarang dikendalian oleh Adobe Systems.

Adobe Systems, yang diperoleh Aldus, sekarang memegang hak cipta TIFF ke spesifikasi. Sejak tahun 1992 tidak terjadi perubahan besar pada TIFF, meskipun beberapa Aldus / Adobe telah menerbitkan catatan teknis dengan ekstensi kecil untuk format, dan beberapa spesifikasi, termasuk TIFF / EP berdasarkan TIFF 6,0 spesifikasi.

TIFF juga fleksibel, karena mengadaptasi format file yang menangani gambar dan data dalam satu file, termasuk dengan judul tag (ukuran, definisi, gambar-data pengaturan, diterapkan kompresi gambar) mendefinisikan gambar geometri. Misalnya, TIFF dapat menangani file kontainer kompresi JPEG dan RLE (berjalan-Encoding panjang) gambar. TIFF juga merupakan vector yang berbasis Kliping path (digariskan, croppings, gambar frame). TIFF dapat membuat file gambar yang berguna sebagai arsip karena kemampuannya dalam menyimpan data gambar di lossless.

E. PNG


PNG (Portable Network Graphics) adalah format gambar bitmap yang menggunakan kompresi data lossless. PNG diciptakan untuk meningkatkan sekaligus menggantikan GIF (Graphics Interchange Format) sebagai format file gambar yangt tidak memerlukan lisensi hak paten. PNG juga mendukung palet berbasis (palet 24-bit RGB warna), abu-abu atau gambar RGB serta untuk mentransfer gambar di Internet.

Dalam hal kompresi, PNG menggunakan non-paten lossless kompresi data (metode menurunkan), algoritma yang digunakan juga pada zlib kompresi perpustakaan. Metode yang mengkombinasikan prediksi di mana untuk setiap baris gambar memiliki filter yaitu metode memprediksi warna setiap piksel berdasarkan warna dan piksel sebelumnya dengan mengurangi prediksi warna piksel dari warna sebenarnya.

No comments:

Post a Comment