Selamat datang di sonoku.com

Konversi Bilangan Heksadesimal ke Biner dengan Delphi

Bagi anda yang sering berhubungan dengan interface mikrokontroler dan PC kadang memerlukan konversi bilangan heksadesimal ke dalam bentuk Biner. Sebenarnya Delphi telah menyediakan fungsi HexToBin sendiri, tapi kali ini kita coba untuk mengkonversi bilangan heksadesimal dengan tipe data string dan menghasilkan bilangan biner dalam bentuk string juga.

Coba perhatikan fungsi berikut ini

dan berikut dara penggunaannya dalam program

Cara Menginstal VaComm di Delphi

Komponen ini sangat penting untuk PC komunikasi (antarmuka) dengan hardware eksternal menggunakan port serial (Comm) . Cukup mudah digunakan, dan fiturnya lengkap. Kali ini kita berbicara sedikit tentang cara menginstal komponen-komponen ke VaComm pada Delphi. Kali ini kita mencoba untuk Delphi 7, Delphi versi lain adalah cara yang sama, hanya berbeda dalam file komponennya. Untuk mendapatkan komponen, silahkan download melalui link di bagian akhir artikel ini. Langkah untuk menginstal VaComm sebagai berikut:

1. Buka Delphi

2. Kemudian langkah berikutnya untuk mengekstrak file ke folder instalasi tmsa32d7.ZIP Delphi, misalnya C: \ Program Files \ Borland \ Delphi7 \ tmsa32d7

3. Cari file paket vacomm7.dpk , dan klik ganda.

4. Kembali ke program Delphi, anda akan melihat form berikut

5. Dalam dialog yang muncul klik tombol Compile, kemudian lanjutkan untuk menginstal VaComm komponen dengan mengklik tombol Install. Akan muncul informasi bahwa komponen telah diinstal.

 

6. Berikutnya mencakup proses instalasi dengan memilih File-Tutup Semua pada menu utama Delphi, dan pilih Yes untuk menyimpan file instalasi.

7. Setelah file instalasi disimpan, maka Anda harus mengubah jalur direktori library untuk menunjuk file-file library yang Anda hanya menginstal. Pilih Tools-Lingkungan Pilihan …, sehingga Anda akan melihat dialog ini. Pada dialog muncul, pilih Tab library.

 

8. Selanjutnya, Anda harus menemukan jalur direktori library dengan mengklik tombol […], misalnya C: \ Program Files \ Borland \ Delphi7 \ tmsa32d7

9. Telusuri jalur direktori library Anda, dan klik OK

 

10. Sekarang, tambahkan path library dengan klik tombol “Add”.

 

11. Selesai

Setelah proses selesai kita sekarang memiliki tab tambahan bernama TMS Async32 komponen dalam palet komponen. Good luck!

download Vacomm7

tmsa32d7.ZIP (Delphi 7)

Apa itu file .INI?

File .INI (file dengan ekstensi .INI) adalah file teks berisi konfigurasi sebuah aplikasi berbasis sistem operasi Windows yang digunakan untuk menyimpan sebuah konfigurasi sebuah aplikasi. Sebenarnya Windows merekomendasikan penggunaan registry untuk menyimpan setting/konfigurasi sebuah aplikasi program, namun penggunaan file .INI dirasa lebih cepat dan mudah untuk diakses. Kata “INI” berasal dari “Initialization” atau inisialisasi. Dengan demikian file INI akan diakses awal ketika sebuah aplikasi dijalankan, namun tidak menutup kemungkinan file diakses atau dimanipulasi pada saat aplikasi berjalan.

Format File INI

File INI memiliki struktur/format seperti berikut:

Setiap file INI terdiri dari satu atau lebih Section, tiap Section terdiri dari satu atau lebih Key yang memiliki nilai (Value). SectionName ditulis dalam sebuah tanda kurung “[” dan “]” dan berdiri sendiri dalam satu baris. Sifat tulisan pada SectionName adalah Case-Sensitive jadi besar kecil huruf penting dan tidak boleh ada spasi. KeyName diikuti tanda “=” dan sebuah nilai (Value), juga ditulis dalam satu baris. Value bisa berupa data dengan tipe integer, string, atau boolean. Sebuah komentar (Comment) diawali dengan tanda “;”.

Contoh isi File INI

Berikut adalah contoh file INI yang digunakan untuk menyimpan konfigurasi dari sebuah port serial RS232 dan alamat database.  Jika diperhatikan pada section Database,  file INI digunakan untuk menyimpan sebuah Connection String untuk koneksi database, dan juga untuk menyimpan username dan password yang digunakan untuk mengakses sebuah aplikasi. Jika diperlukan sebuah value dapat di-enkripsi untuk keamanan.

[/crayon]

 

Membuat button pada saat runtime

Jarang sekali programmer membuat sebuah komponen/objek visual pada saat runtime. Artinya mereka membuat sebuah komponen visual pada saat program di jalankan (run). Biasanya semua dibuat pada saat mereka merancang tampilan program dengan meletakkan semua komponen seperti tombol (TButton), Combobox, dan lain sebagainya pada form. Cara seperti ini sering disebut dengan istilah “Designtime” atau saat merancang.

Namun jika anda perlu sekali untuk membuat sebuah komponen visual secara runtime, mungkin cara ini adalah cara pragmatis yang tepat untuk anda ikuti. Kali ini kita coba untuk membuat sebuah tombol (TButton) pada saat program dijalankan. Jadi rencananya dengan menekan sebuah tombol yang pasang pada Form pada saat designtime, program akan membuat tombol yang lain. Baik langsung saja.

Letakkan sebuah tombol pada Form utama, kemudian masuklah pada bagian prosedur OnClick tombol tersebut. Pada frame OnClick tersebut masukkan kode berikut:

Pada kode diatas kita menggunakan metode “Create”, dimana sebuah kelas objek  TButton dibuat menggunakan perintah create.  Setelah pemanggilan create, kemudian kita deklarasikan property button yang akan tampil nanti, mulai dari visibilitas, parental,  posisi tombol, lebar, caption, dan tidak tertinggal adalah nama objek itu sendiri. Semua persis seperti kita membuat tombol pada saat designtime, hanya saja kita menuliskan value sebuah objek secara pragmatis melalui sebuah kode.

Jika anda berniat untuk memberikan sebuah aksi pada tombol yang kita buat secara runtime, misalnya pada event OnClick (aksi pada saat tombol di-klik), pertama deklarasikan sebuah prosedur OnClick pada bagian Private Declarations seperti dibawah ini.

setelah itu buatlah prosedur dengan nama KlikTombol seperti kode berikut.

Kemudian tambahkan pada event OnClick tombol “Buat Tombol” sebuah deklarasi event KlikTombol tadi sehingga kodenya akan seperti berikut.

Cukup mudah bukan? Perhatikan sekarang, bagaimana jika tombol “Buat Tombol” di-klik untuk kedua kalinya? Pastinya akan muncul pesan orror bahwa terdapat duplikasi nama sebuah objek. Hal ini memang sangat dilarang dalam Delphi. Untuk jika anda ingin membuat tombol lain secara runtime, anda harus membuat tombol tersebut dengan nama yang unik. Perhatikan contoh kode berikut.

Contoh diatas akan membuat tombol sebanyak 5 kali, kemudian menatanya sedemikian rupa agar tidak bertumpuk dengan memodifikasi properti top dan left tombol. Agar nama objek menjadi unik, kita tambahkan sebuah angka yang diambilkan dari variabel iterasi “i” di belakang value properti Name tombol. Namun tetap saja, jika tombol “Buat Tombol 5” ditekan utuk kedua kalinya akan tetap muncul pesan erorr duplikat  nama objek. Lalu bagaiamana mengatasinya? Tunggu artikel berikutnya…oke :)


Source Code (170kB
)
Download sourcecode Runtime Object Creation<a href=

Versi Delphi

a

Borland Delphi 1
Delphi 1 dirilis pada tahun 1995 untuk 16-bit Windows 3.1 dan merupakan proyek awal dari apa yang sekarang disebut dengan  perangkat Rapid Application Development (RAD). Delphi 1 adalah penerus dari Turbo Pascal dan Borland Pascal. Seperti Turbo Pascal, Delphi kode ditulis dalam dialek bahasa pemrograman Pascal yang dikenal sebagai Object Pascal.

Borland Delphi 2
Dirilis pada tahun 1996, didukung dengan Windows 32-bit. Digabungkan dengan Delphi 1 untuk aplikasi Windows 16-bit.

Borland Delphi 3

Delphi’s Active Insight and Broker Technologies combine to give you a flexible and powerful architecture for developing distributed client/server applications.[1]
Billy Bosworth, DBMS Online, April, 1997

Delphi 3 dikenal dengan “Delphi klasik” yang dirilis pada tahun 1997, beberapa penambahan pada versi ini antara lain: teknologi code insight, DLL debugging, template komponen, komponen DecisionCube and TeeChart, teknologi WebBroker, ActiveForms, paket komponen, dan integrasi dengan antarmuka COM.

Delphi 4

Delphi 4 is a comprehensive set of professional and client/server development tools for building high productivity solutions for distributed computing. Delphi provides Java interoperability, high performance database drivers, CORBA development, and Microsoft BackOffice support. You’ve never had a more productive way to customize, manage, visualize and update data. With Delphi, you deliver robust applications to production, on time and on budget[2].

Delhi 4 dirilis pada tahun 1996, support Windows98 dan lebih mengembangkan OLE dan COM juga menambahkan fitur Array Dinamis.

Delphi 5
Delphi 5 banyak memperkenalkan fitur baru seperti berbagai layout desktop, konsep frame, pembangunan paralel, kemampuan terjemahan, debugger terintegrasi yang disempurnakan, kemampuan Internet yang baru (XML), powerful database (dukungan ADO), dll. Delphi 5 rilis pada tahun 1997.

Kylix
Kylix merupakan Delphi untuk sistem operasi Linux yang rilis pada tahun 2001.




Borland Delphi 6
Hadir untuk mendukung baik Windows maupun Linux.

Borland Delphi 7
Versi ini menjadi versi standar yang banyak digunakan oleh para programmer. Dirilis pada tahu 2002, Delphi 7 dibuat Borland populer karena stabilitas, kecepatan dan persyaratan perangkat keras yang rendah dan masih banyak digunakan hingga saat ini. Delphi 7 menambahkan dukungan untuk Windows XP, dan menambahkan lebih banyak dukungan untuk membangun aplikasi Web. Ini juga merupakan versi terakhir dari Delphi yang dapat digunakan tanpa aktivasi.

Borland Delphi 8
Delphi 8, dirilis Desember 2003, adalah rilis NET-satunya yang memungkinkan pengembang untuk mengkompilasi kode Delphi Object Pascal ke .NET CIL (Common Intermediate Language). IDE ditulis ulang untuk mengakomodasi untuk pengembangan .NETdan berubah menjadi antarmuka yang mirip dengan Microsoft Visual Studio.NET. Sayangnya versi ini tidak lagi mendukung pengembang untuk membuat aplikasi asli (*.exe).

Borland Delphi 2005
Disebut juga Delphi 9 atau Borland Developer Studio 3.0, versi ini memasukkan pengembangan Win32 dan pengembangan NET. dalam satu IDE. Banyak yang ditambahkan pada Delphi versi ini, seperti pada sisi IDE, dan perintah for..in (seperti foreach s # pada bahasa C). Kemampuan untuk mengkompilasi aplikasi asli windows (*. exe) telah ditambahkan kembali ke Delphi 2005.

Delphi 2006
Pada akhir 2005 versi baru, Delphi 2006 atau Delphi 10 atau Borland Developer Studio 4.0 dirilis. Versi ini menggabungkan beberapa pengembangan seperti Delphi .NET, C#, Delphi Win32 dan C++. Delphi 10 lebih stabil dibandingkan dengan Delphi 8 atau Delphi 2005, dan ditingkatkan bahkan lebih dengan merilis service pack dan beberapa perbaikan terbaru.

Delphi 2007

Delphi 2007 (Delphi 11), versi pertama oleh CodeGear, dirilis pada tanggal 16 Maret 2007. Fitur-fitur baru termasuk dukungan untuk MS Build dan penyempurnaan Visual Component Library untuk Windows Vista, tapi fitur C# Builder dalam rilis ini penjualannya tidak setinggi seperti yang diharapkan karena Visual Studio juga menawarkan C#. Windows Form desainer untuk Delphi. NET juga ditambahkan di D2007 karena didasarkan atas bagian dari NET framework. API yang telah dirubah begitu drastis oleh Microsoft di NET 2.0 yang akan memperbarui IDE menjadi langkah besar. Untuk pertama kalinya Delphi bisa di-download dari Internet dan diaktifkan dengan kunci lisensi, kemampuan didukung oleh teknologi instalasi InstallAware baru Internasionalisasi versi Delphi 2007 dikirim secara bersamaan dalam bahasa Inggris, Perancis, Jerman dan Jepang. RAD Studio 2007 (kode bernama Highlander), yang meliputi NET dan pengembangan C++ Builder, dirilis pada September 5, 2007

Pemfilteran Domain Spasial

Sebenarnya istilah filter mengacu pada proses melakukan penyaringan komponen frekuensi tertentu (yang sama diterima, yang tidak ditolak). Jika kita ingat kembali pelajaran tentang filter di Teknik Elektro, kita tahu bahwa filter lolos rendah (Low Pass Filter/LPF) akan meloloskan komponen yang berfrekuensi rendah, dalam image processing LPF akan menghasilkan citra Blur (lembut/halus). Lalu filter dalam pengolahan citra bentuknya seperti apa? Biasanya dalam bentuk piksel berukuran 2×2, 3×3 atau 5×5 dan seterusnya, tergantung kebutuhan, dan piksel ini biasa disebut dengan mask atau kernel ataupun window. Kalau saya menyebutnya saringan, karena cara kerjanya memang mirip saringan :).

Pemfilteran domain spasial adalah proses manipulasi kumpulan piksel dari sebuah citra untuk menghasilkan citra baru[1]. Aplikasinya untuk perbaikan kualitas citra. Read More

Mengatur Brigthness Citra menggunakan Delphi

Sebuah citra grayscale 256 warna akan tampak gelap bila seluruh komponen warnanya berada mendekati nilai 0, dan juga sebaliknya jika seluruh komponen warnya mendekati nilai 255 maka citra akan tampak lebih terang. Untuk dapat mengatur kecerahan suatu citra kita dapat menambahkan nilai intensitas piksel dengan suatu nilai konstanta. Persamaannya seperti berikut.

Dimana fi adalah nilai intensitas (warna) piksel pada citra asli, dan b adalah nilai konstanta kecerahan (brightness). Jika nilai b negatif maka intensitas piksel akan lebih gelap, sebaliknya jika nilai b positif maka intensitas citra akan semakin cerah.

Berikut ilustrasi operasi brightness pada sebuah citra.

Untuk citra true color, masing-masing komponen warna Red, Green dan Blue perlu ditambahkan dengan suatu konstanta.

Mengatur kecerahan citra dengan Delphi

 

Rancang tampilan form seperti pada gambar, atur properti komponennya seperti pada tabel.

Program yang kita buat dapat merubah level kecerahan pada citra 24 bit di setiap kanalnya (R, G, B), untuk itu kita memerlukan 3 Trackbar masing-masing untuk kanal (channel) R, G dan B. Nilai posisi trackbar kita atur nilainya mulai -255 hingga 255, tujuannya agar kita bisa mendapatkan penambahan dengan nilai negatif (pengurangan).

Pada saat pertama kali membuka file gambar kita perlu membuat dulu citra/image sementara untuk diolah kecerahannya. Selain itu khusus untuk citra 8 bit (grayscale) kita tidak bisa mengatur kecerahan warna perkanal (RGB) seperti pada citra true color (24bit),untuk itu kita perlu mengatur perubahan kecerahan citra satu kanal saja. Ini dapat diatur dengan menambahkan checkbox (Equal Track) agar TrackBar dapat aktif bersamaan (seolah hanya 1 nilai kanal yang aktif). Potongan programnya akan tampak seperti berikut.

Operasi kontrol kecerahan dilakukan dengan menambahkan tiap nilai intensitas citra dengan nilai posisi Trackbar tiap kanalnya. Kemudian dicek apakah hasil penambahan melebihi nilai maksimum intensitasnya(255), jika ya maka nilai intensitas yang baru dibuat sama dengan 255. Sebaliknya jika melebihi nilai intensitas nol (negatif) maka intensitas citra yang baru dibuat sama dengan 0. Berikut potongan programnya.

;

Berikut hasil kontrol kecerahan citra dengan berbagai nilai konstanta b yang berbeda-beda.

Download (source code)

1. Image Processing – Brightness.rar (190kb)

References

[1] Wikipedia

[2] imageprocessingindelphi.blogspot.com

[3] Sutoyo,T., Edy Mulyanto, Vincent Suhartono, Oky Dwi Nurhayati, Wijanarto, Teori Pengolahan Citra Digital, UDINUS, Penerbit Andi, 2009

Operasi Inversi (Negasi Citra) dengan Delphi

Operasi ini akan menghasilkan citra negatif seperti film (negatif) foto. Pada citra greyscale, operasi inversi mengubah piksel warna putih menjadi hitam, dan sebaliknya. Sedangkan jika kita lihat dari histogramnya maka histogram citra negatif adalah pencerminan dari histogram citra asal/asli.

Operasi inversi dilakukan dengan mengurangkan nilai intensitas piksel dari nilai intensitas piksel maksimumnya.

Jadi jika ada citra 8 bit dengan 256 level intensitas maka persamaan untuk mendapatkan citra negatif adalah

Operasi Inversi dengan Delphi

Oke kita langsung saja dengan implementasinya dengan Delphi. Seperti biasa tambahkan komponen berikut dan atur propertinya.

Program yang akan kita buat akan memproses citra dengan format 8 bit dan 24 bit. Berikut potongan programnya.

[sourcecode language=”delphi”]
procedure TForm1.Invert1Click(Sender: TObject);
var piksel : PByteArray;
brs, kol: Integer;
rgb1 : array [0..2] of Integer;
begin
for brs := 0 to Image2.Picture.Height – 1 do
begin
piksel := Image2.Picture.Bitmap.ScanLine [brs];
for kol := 0 to Image2.Picture.Width-1 do
begin
if Image2.Picture.Bitmap.PixelFormat = pf8bit then // citra 8 bit
piksel[kol] := 256 – piksel[kol];
if Image2.Picture.Bitmap.PixelFormat = pf24bit then //citra 24 bit
begin
piksel[3*kol] := 256 – piksel[3*kol];
piksel[3*kol+1] := 256 – piksel[3*kol+1];
piksel[3*kol+2] := 256 – piksel[3*kol+2];
end;
end;
Image2.Invalidate;
end;
end;
[/sourcecode]

Download (source code)

1. Image Processing – Invert.rar (178kb)

References

[1] Wikipedia

[2] imageprocessingindelphi.blogspot.com

[3] Sutoyo,T., Edy Mulyanto, Vincent Suhartono, Oky Dwi Nurhayati, Wijanarto, Teori Pengolahan Citra Digital, UDINUS, Penerbit Andi, 2009

Thresholding Citra menggunakan Delphi

Thresholding (pengambangan) artinya adalah nilai piksel pada citra yang memenuhi syarat nilai ambang yang kita tentukan dirubah kenilai tertentu yang dikehendaki. Secara matematis ditulis seperti berikut

Dengan fi (x,y) adalah citra asli (input), fo(x,y) adalah piksel citra baru (hasil/output), Tn adalah nilai ambang yang ditentukan. Nilai piksel pada (x,y) citra output akan sama dengan T1 jika nilai piksel (x,y) citra input tersebut ? T1. Nilai piksel (x,y) citra input akan sama dengan T2 jika T1 < fi(x,y)< T2, dan seterusnya…

Kita ambil contoh citra greyscale 8 bit akan dipetakan menjadi peta biner (hitam dan putih saja) dengan nilai ambang tunggal = 128 maka persamaan matematisnya

Ini berarti piksel yang nilai intensitasnya dibawah 128 akan diubah menjadi hitam (nilai intensitas = 0), sedangkan piksel yang nilai intensitasnya diatas 128 akan menjadi putih (nilai intensitas = 255).

Thresholding dengan Delphi
Contoh berikut kita akan  melakukan operasi thresholding tunggal dengan nilai ambang yang bisa diatur. Citra yang diolah adalah citra true color dan hasilnya berupa berupa citra biner. Implementasi dengan Delphi cukup mudah, mulailah dengan membentuk tampilan formnya seperti berikut. Tambahkan beberapa komponen dan atur propertinya seperti tabel.

Proses pertama adalah merubah citra true color menjadi citra greyscale , menggunakan metode nilai maksimum. Berikut potongan kode programnya.

Setelah itu kita mulai dengan proses thresholding. Nilai level grey yang didapat dibandingkan dengan nilai ambang yang ditentukan oleh posisi TrackBar1. Jika nilainya lebih kecil dari nilai ambang maka piksel akan diubah ke intensitas nol (warna putih), jika lebih besar atau sama dengan nilai ambang piksel diubah ke intensitas 255 (hitam).

Berikut potongan programnya.

Gambar berikut menunjukkan hasil thresholding dengan nilai ambang yang berbeda-beda.

Download source code

1. Image Processing – Thresholding.rar (184kb)

References

[1] Wikipedia

[2] imageprocessingindelphi.blogspot.com

[3] Sutoyo,T., Edy Mulyanto, Vincent Suhartono, Oky Dwi Nurhayati, Wijanarto, Teori Pengolahan Citra Digital, UDINUS, Penerbit Andi, 2009

Membuat Histogram Citra dengan Dephi

Histogram adalah grafik yang menujukkan frekuensi kemunculan setiap nilai gradasi warna[3]. Sumbu x menunjukkan intensitas warna, sedangkan y menunjukkan frekuensi kemunculannya. Kita ambil contoh citra greyscale 3 bit ukuran 5×5 piksel dengan peta berikut.


Kita bisa lihat pada gambar diatas, nilai 1 muncul 4 kali, nilai 2 muncul 3 kali, nilai 3 muncul 3 kali dan seterusnya jika kita buat tabelnya  akan seperti ini.

Dan bila digambarkan grafiknya seperti berikut

Agar gambar grafik tidak melebihi batas layar maka perlu dilakukan proses normalisasi. Prosesnya cukup membagi jumlah pada suatu nilai intensitas dengan jumlah keseluruhan piksel. Tabel hasil normalisasinya akan tampak seperti berikut.

Membuat histogram dengan Delphi

Baik, sekarang kita mulai saja mengimplementasikannya kedalam program Delphi. Kita mulai dengan menaruh komponen berikut ke dalam form dan setting propertinya seperti tabel.

Khusus untuk komponen Chart1 ikuti langkah berikut:

  1. Klik dua kali pada komponen Chart1, hingga muncul dialog Editing Chart1
  2. Pada tab Chart, sub tab Series, tambahkan series dengan klik tombol Add, kemudian pada dialog TeeChart Gallery pilih Bar dan non-akitfkan mode 3D (hilangkan centang 3D), klik OK.
  3. Pada tab Chart, sub tab Axis, hilangkan tanda centang pada Show Axis.
  4. Pada tab Chart, sub tab Titles, ganti judulnya menjadi HISTOGRAM.
  5. Pada tab Chart, sub tab Legend, hilangkan centang pada Visible.
  6. Pada tab Series, sub tab Marks, hilangkan centang pada Visible.

Berikut adalah sourcecode untuk membuat histogram dengan Delphi.

[sourcecode language=”delphi”]
procedure TForm1.Histogram;
var piksel : PByteArray;
Gray, TotalPiksel, i, brs, kol : integer;
R, G, B : Real;
begin
Citra.PixelFormat := pf24bit;
for i := 0 to 255 do
begin
HistogramGray[i] := 0
end;
TotalPiksel := 0;
for brs := 0 to Citra.Height – 1 do
begin
kol := 0;
piksel := Citra.ScanLine[brs];
repeat                //greyscaling
R := 0.11*piksel[kol];
G := 0.59*piksel[kol+1];
B := 0.3*piksel[kol+2];
Gray := round(R+G+B);
HistogramGray[Gray] := histogramgray[Gray]+1;        // pengambilan data intensitas
inc(TotalPiksel);
Inc(kol,3);
until kol &amp;amp;amp;amp;gt; 3*(Citra.Width-1);
end;
for kol:=0 to 255 do // normalisasi
HistogramGray[kol] := HistogramGray[kol]/TotalPiksel
end;
[/sourcecode]

Berikut kode untuk penampilan data histogram ke bentuk grafik

[sourcecode language=”delphi”]
procedure TForm1.HIstogram1Click(Sender: TObject);
var i:Integer;
begin
Histogram;
Series1.Clear;
for i := 0 to 255 do
begin
Series1.AddXY(i, HIstogramGray[i],”,clBlack);
end;
end;
[/sourcecode]

Sekedar perbandingan hasil histogram menggunakan Delphi dengan histogram milik Adobe Photoshop.

ImageProcessing-Histogram.rar