Senin, 25 Mei 2009
jawaban Tugas 1
{
// TODO: Add your command handler code here
static char BASED_CODE szFilter]="Bitmap Files (*.bmp)|*.bmp||";
CFileDialog m_ldFile(TRUE, "*.bmp", name, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, szFilter);
if(m_ldFile.DoModal()==IDOK)
{
name=m_ldFile.GetPathName();
LoadGambar();
}}
// merubah data pixel ke RGB
void WarnaToRGB(long int warna,int *Red, int *Green, int *Blue)
{
*Red = warna & 0x000000FF;
*Green = (warna & 0x0000FF00) >> 8;
*Blue = (warna & 0x00FF0000) >> 16;
}
//merubah RGB ke data pixel
long int RGBToWarna(int Red, int Green, int Blue)
{
return(Red+(Green<<8)+(blue<<16));>
}
// Menampilkan gambar hasil dari open file
void CEdgeRobertView::LoadGambar(void)
{
CDC* pDC = GetDC();
CDC dcMem;
int i,j,r,g,b,s;
long int w;
HBITMAP hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(), name,
IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION);
if(hBitmap)
{
if(m_bmpBitmap.DeleteObject())
m_bmpBitmap.Detach();
m_bmpBitmap.Attach(hBitmap);
}
dcMem.CreateCompatibleDC(pDC);
dcMem.SelectObject(&m_bmpBitmap);
// Proses RGB to GRAY-SCALE
f0r(i=0;i<250;i++)>
f0r(j=0;j<250;j++)>
w=dcMem.GetPixel(j,i);
WarnaToRGB(w,&r,&g,&b);
s=int((r+g+b)/3);
w=RGBToWarna(s,s,s);
dcMem.SetPixel(j,i,w);
}
pDC->BitBlt(0,0,250,250,&dcMem,0,0,SRCCOPY);
}
void CEdgeRobertView::OnTestEdgerobert()
{
// TODO: Add your command handler code here
CDC* pDC = GetDC();
CDC dcMem;
int i,j,r,g,b;
int resultr,resultg,resultb;
long int w,mat[1][2];
int h[1][2],hr,hg,hb;
dcMem.CreateCompatibleDC(pDC);
dcMem.SelectObject(&m_bmpBitmap);
// Proses Konvolusi
int nh=2; // Menyatakan ukuran filter
// Penentuan kernel filter
h[0][0]=-1; h[0][1]=1;
int u=0;//Menyatakan ukuran filter orizontal
f0r(i=0;i<250;i++)>
f0r(j=0;j<250;j++){>
mat[0][0]=dcMem.GetPixel(j,i);
mat[0][1]=dcMem.GetPixel(j,i+1);
hr=0;hg=0;hb=0;
//Menyatakan ukuran filter vertikal
f0r(int v=0;v<2;v++){>
WarnaToRGB(mat[u][v],&r,&g,&b);
hr+=r*h[u][v];
hg+=g*h[u][v];
hb+=b*h[u][v];
}
resultr=hr;
resultg=hg;
resultb=hb;
if(resultr>255)resultr=255;
if(resultg>255)resultg=255;
if(resultb>255)resultb=255;
w=RGBToWarna(resultr,resultg,resultb);
dcMem.SetPixel(j,i,w);
void CTgs1View::OnTestEdgeprewitt()
{
// TODO: Add your command handler code here
CDC* pDC = GetDC();
CDC dcMem;
int i,j,r,g,b,u,v;
int resultr,resultg,resultb;
long int mat[3][3],temp[250][250];
int hy[3][3],hx[3][3],hrx,hgx,hbx,hry,hgy,hby;
dcMem.CreateCompatibleDC(pDC);
dcMem.SelectObject(&m_bmpBitmap);
// Proses Konvolusi
int nh=3; // Menyatakan ukuran filter
// Penentuan kernel filter hy
hy[0][0]=-1; hy[0][1]=0; hy[0][2]=1;
hy[1][0]=-1; hy[1][1]=0; hy[1][2]=1;
hy[2][0]=-1; hy[2][1]=0; hy[2][2]=1;
// Penentuan kernel filter hx
hx[0][0]=-1; hx[0][1]=-1; hx[0][2]=-1;
hx[1][0]=0; hx[1][1]=0; hx[1][2]=0;
hx[2][0]=1; hx[2][1]=1; hx[2][2]=1;
f0r(i=0;i<250;i++)>
f0r(j=0;j<250;j++){>
mat[0][0]=dcMem.GetPixel(j-1,i-1);
mat[0][1]=dcMem.GetPixel(j,i-1);
mat[0][2]=dcMem.GetPixel(j+1,i-1);
mat[1][0]=dcMem.GetPixel(j-1,i);
mat[1][1]=dcMem.GetPixel(j,i);
mat[1][2]=dcMem.GetPixel(j+1,i);
mat[2][0]=dcMem.GetPixel(j-1,i+1);
mat[2][1]=dcMem.GetPixel(j,i+1);
mat[2][2]=dcMem.GetPixel(j+1,i+1);
hrx=0;hgx=0;hbx=0;
hry=0;hgy=0;hby=0;
f0r(u=0;u
f0r(v=0;v
WarnaToRGB(mat[u][v],&r,&g,&b);
hrx+= r*hx[u][v];
hgx+= g*hx[u][v];
hbx+= b*hx[u][v];
hry+= r*hy[u][v];
hgy+= g*hy[u][v];
hby+= b*hy[u][v];
}
resultr=abs(hrx)+abs(hry);
resultg=abs(hgx)+abs(hgy);
resultb=abs(hbx)+abs(hby);
if(resultr>255)resultr=255;
if(resultg>255)resultg=255;
if(resultb>255)resultb=255;
temp[j][i]=RGBToWarna(resultr,resultg,resultb);
}
f0r(i=0;i<250;i++)>
f0r(j=0;j<250;j++)>
dcMem.SetPixel(j,i,temp[j][i]);
pDC->BitBlt(250,0,500,250,&dcMem,0,0,SRCCOPY);
}
void CTgs1View::OnTestEdgesobel ()
{
// TODO: Add your command handler code here
CDC* pDC = GetDC();
CDC dcMem;
int i,j,r,g,b,u,v;
int resultr,resultg,resultb;
long int mat[3][3],temp[150][150];
int hy[3][3],hx[3][3],hrx,hgx,hbx,hry,hgy,hby;
dcMem.CreateCompatibleDC(pDC);
dcMem.SelectObject(&m_bmpBitmap);
// Proses Konvolusi
int nh=3; // Menyatakan ukuran filter
// Penentuan kernel filter hy
hy[0][0]=-1; hy[0][1]=0; hy[0][2]=1;
hy[1][0]=-2; hy[1][1]=0; hy[1][2]=2;
hy[2][0]=-1; hy[2][1]=0; hy[2][2]=1;
// Penentuan kernel filter hx
hx[0][0]=-1; hx[0][1]=-2; hx[0][2]=-1;
hx[1][0]=0; hx[1][1]=0; hx[1][2]=0;
hx[2][0]=1; hx[2][1]=2; hx[2][2]=1;
f0r(i=0;i<250;i++)>
f0r(j=0;j<250;j++){>
mat[0][0]=dcMem.GetPixel(j-1,i-1);
mat[0][1]=dcMem.GetPixel(j,i-1);
mat[0][2]=dcMem.GetPixel(j+1,i-1);
mat[1][0]=dcMem.GetPixel(j-1,i);
mat[1][1]=dcMem.GetPixel(j,i);
mat[1][2]=dcMem.GetPixel(j+1,i);
mat[2][0]=dcMem.GetPixel(j-1,i+1);
mat[2][1]=dcMem.GetPixel(j,i+1);
mat[2][2]=dcMem.GetPixel(j+1,i+1);
hrx=0;hgx=0;hbx=0;
hry=0;hgy=0;hby=0;
f0r(u=0;u
f0r(v=0;v
WarnaToRGB(mat[u][v],&r,&g,&b);
hrx+= r*hx[u][v];
hgx+= g*hx[u][v];
hbx+= b*hx[u][v];
hry+= r*hy[u][v];
hgy+= g*hy[u][v];
hby+= b*hy[u][v];
}
resultr=abs(hrx)+abs(hry);
resultg=abs(hgx)+abs(hgy);
resultb=abs(hbx)+abs(hby);
if(resultr>255)resultr=255;
if(resultg>255)resultg=255;
if(resultb>255)resultb=255;
temp[j][i]=RGBToWarna(resultr,resultg,resultb);
}
f0r(i=0;i<250;i++)>
f0r(j=0;j<250;j++)>
dcMem.SetPixel(j,i,temp[j][i]);
pDC->BitBlt(250,0,500,250,&dcMem,0,0,SRCCOPY);
}
Kamis, 23 April 2009
Dasar Pengolahan Citra (2)
1. Mahasiswa dapat membuat program untuk memproses gambar dengan mengambil
warna RGB
2. Mahasiswa dapat membuat program untuk memproses gambar dengan
meletakkan warna RGB pada lokasi x dan y
Buatlah program untuk melakukan perputaran citra yang setiap baris pada picture-box 1
menjadi kolom pada picture-box 2 dan setiap kolom pada picture box 1 menjadi baris
pada picture box 2. Tampilan formnya seperti pada file praktikum
Rabu, 22 April 2009
Analisa Praktikum II
Terdapat ketidaksempurnaan pada gambar di samping, yaitu adanya gambar lain yang masuk pada tampilan warna blue, namun untuk hasil output pada kombinasi warna RGB masing-masing bernilai 255, 255, 255 adalah warna putih hal ini sudah termasuk memenuhi kriteria.
Pada percobaan kedua memahami maksud dari percobaan ini. Yaitu bagaimana kita memproses gambar dengan mengambil warna RGB (red,green,blue). Tampilan awal adalah pada saat penekanan tombol merah warna yang keluar adalah merah. Begitu juga sama halnya untuk warna hijau dan biru. dan menamplikan semua warna langsung yaitu Red, Green, dan Blue
1. Suatu gambar dapat di proses dengan mengambil warna RGB nya. Sehingga dapat diketahui susunan warna RGB nya
2. Dengan program, digunakan untuk memproses gambar dengan meletakkan warna RGB dan lokasi x dan y
Kamis, 02 April 2009
Analisa Laporan Praktikum 1
ANALISA
Setelah menyelesaikan praktikum pertama, dapat dianalisa bahwa untuk mengerjakan praktikum tersebut pertama-tama kita membuat suatu projek baru yaitu berupa Multiple document, bukan Dialog based seperti pada percobaan sebelumnya. Projek tersebut diberi nama Test. Kemudian kita membuat menu-menu yang dibutuhkan berikut submenunya. Menu yang saya buat hanya dua yaitu Menu dan Bantuan. Untuk Menu ada empat submenu yang saya buat yaitu ‘Satu’, ‘Dua’, ‘Tiga’, ’Empat’, dan ‘Lima’. Sedangkan untuk ‘Bantuan’ hanya ada satu submenu yaitu Tentang Test. Listing programnya adalah :
void CTestView::OnSatu()
{
// TODO: Add your command handler code here
MessageBox("Selamat Belajar Pengolahan Citra");
}
void CTestView::OnDua()
{
// TODO: Add your command handler code here
CDC* pDC = GetDC();
pDC->TextOut(10,10,"Ini adalah Teks");
}
void CTestView::OnTiga()
{
// TODO: Add your command handler code here
CDC* pDC = GetDC();
pDC->MoveTo(50,20);
pDC->LineTo(50,200);
pDC->TextOut(30,5,"y");
pDC->MoveTo(50,200);
pDC->LineTo(250,200);
pDC->TextOut(260,200,"x");
}
void CTestView::OnEmpat()
{
// TODO: Add your command handler code here
}
void CTestView::OnLima()
{
// TODO: Add your command handler code here
}
Pada latihan no. 1, kita diminta untuk membuat suatu program untuk menampilkan messagebox dengan tulisan ‘Selamat Belajar Pengolahan Citra’ apabila salah satu submenu dipilih. Untuk menampilkan messagebox tersebut, menu yang dipilih adalah ‘Menu’ sedangkan submenu yang dipilih adalah ‘Satu
Pada latihan no. 2, kita diminta untuk membuat program yang bisa menampilkan tulisan ‘Ini adalah teks’ apabila salah satu submenu dipilih. Untuk menampilkan tulisan tersebut, menu yang dipilih adalah ‘Menu’, sedangkan submenu yang dipilih adalah ‘Dua’
Pada latihan no. 3, kita diminta untuk membuat program yang bisa menampilkan sumbu x dan y apabila salah satu submenu dipilih. Untuk menampilkan tulisan tersebut, menu yang dipilih adalah ‘Menu’, sedangkan submenu yang dipilih adalah ‘Tiga’
KESIMPULAN
MFC dapat digunakan untuk membuat program yang bisa menampilkan dan memroses suatu gambar.
Untuk membuat program yang menghasilkan tampilan seperti pada percobaan awal, jenis projek yang dipilih yaitu ‘Dialog based’. Sedangkan untuk membuat program yang menghasilkan tampilan seperti pada latihan, jenis projek yang dipilih yaitu ‘Multiple document’.
Rabu, 01 April 2009
Dasar Pengolahan Citra (1)
Tujuan dari praktikum ini adalah :
2. Mahasiswa dapat membuat program untuk memproses gambar dengan meletakkan warna RGB pada lokasi x dan y
Dasar Teori:

Dari gambar diatas untuk menentukan warna tertentu dapat dengan mudah dilakukan, yaitu dengan mencampurkan ketiga warna dasar RGB. Tabel dapat anda gunakakn sebagai referensi
Rabu, 18 Maret 2009
Pendahuluan I : Perkenalan MFC
1. Mahasiswa dapat membuat program pengolahan citra menggunakan Visual C++ dengan MFC.
2. Mahasiswa dapat membuat dialog menggunakan Visual C++ dengan MFC.
Pada pratikum yang pertama ini membahas tentang pengenalan MFC.Ini adalah bahasan praktikum yang pertama dari mata kuliah pengolahan citra digital atau yang sering disebut dengan image prosessing.
Apakah sebenarnya MFC itu ?
MFC sebenarnya adalah merupakan komponen yang terdapat pada IDE (Integarated Development Environment) dari Visual C++ 6 yang mana pada komponen ini atau area ini digunakan untuk membuat atau mengedit tampilan dialog box yang bukan form window
Pada perkuliahan semester sebelum - sebelumnya telah digunakan software Visual C++ yaitu pada mata kuliah pemrograman aka tetapi tidak semua komponen - komponen IDE yang ada didalamnya beum digunakan secara keseluruhan, dan saat ini salah satu komponen IDE terebut digunakan pada praktikum pengolahan citra digital. Adapun komponen- komponen IDE yang lainnya antara laian yaitu : Toolbox, Dialog Editor(MFC), Solution Explorer, Class View, Resource View, dan properties Window.
Karena MFC ini digunakan pada praktikum pengolahan citra maka sudah seharusnya kita mengetahui terlebih dahulu apa itu pengolahan citra, pengolahan citra atau image prossesing adalah suatu pemrosesan gambar dari gambar asli menjadi gambar lain sesuai dengan keinginan kita.
IDE merupakan singkatan dari Integrated Development Environment, apa ya itu??setelah kulihat di kmus online, yang artinya integrated itu mengintegrasikan, trus development itu pengembangan, dan environment itu lingkungan,,hmm,trnyata masih rumit juga ya, klo dimaknai satupersatu,,tapi intinya IDE digunakan untuk membuat lingkungan (baca : sistem) yang dibangun secara terintegrasi.
Untuk mencobanya, dibutuhkan beberapa hal sebagai berikut :
1. Seperangkat komputer dengan software Visual C++ 6.0
2. Modul praktikum (baca : buku manual prosedur praktikum)
3. Siapkan smangat dan niat untuk menuntut ilmu
4. Awali dengan bismillah
5. Perhatikan dan praktikkan, tahap demi tahap prosedur praktikum yang ada.
Percobaan:
Menjalankan Visual C++ dengan MFC
1. Membuka Visual C++ 6.0
Pilih menu : Start->Programs->Microsoft Visual Studio 6.0->Microsoft Visual C++ 6.0
2. Memberi nama program
Pilih menu : File->New->Projects->MFC AppWizard(exe)
Isi Project name misalnya dengan: dialog
Tekan tombol OK
3. Memilih isi program
Step 1 :
What tipe of application would you like to create (aplikasi apa yang ingin dibuat) pilih dialog based untuk membuat aplikasi memakai dialog. Perhatikan gambar 1.4. a dialog step 1. Tekan tombol Next.
Step 2 :
1. What features would you like to include?
(fitur apa saja yang akan dimasukkan) pilih About box dan 3D
controls untuk pilihan standar.
2. What features would you like to include?
(mendukung aplikasi apa ?) pilih ActiveX controls untuk pilihan
standar.
3. Would you like to include WOSA support ? Window Sockets tidak
dipilih untuk pilihan standard.
4. Please enter a title for your dialog ? Title sudah berisi text sama
dengan nama project untuk pilihan standard
Perhatikan gambar 1.4.b. dialog step 2. Tekan tombol Next.
Step 3 :
1. What style of project would you like ?
Pilihan standard dan yang aktif hanya MFC Standard.
2. Would you like to generate source file comments ? pilihan standard Yes, Please
3. How would you like to use the MFC Library ? pilihan standard As a shared DLL
Tekan tombol Next
Step 4 :
AppWizard creates the following classes for you
Tekan tombol Finish akan muncul New Project Information.
Kemudian tekan tombol OK. Tampilan awal dialog akan dihasilkan
4. Cara menjalankan program
Pilih menu : Build->Execute (!), Dialog Hasil Execute
Tekan tombol Yes, untuk menutup aplikasi.
Cara Mendisain Dialog
Catatan : Jika Dialog Editor tidak tampak buka pada Resource View (Ctrl-Shift-E) double click pada IDD_TEST_DIALOG.
1. Cara membuat dialog
Buat aplikasi AppWizard seperti pada praktikum 1 dan beri nama project dengan Dialog
Pilih ResourceView pada workspace
Pilih folder paling atas dengan cara klik pada tanda +
Pilih folder dialog dengan cara klik pada tanda +
Klik 2 kali IDD_DIALOG_DIALOG
2. Menghapus dan menambah control pada dialog
Untuk menghapus control : aktifkan control dengan cara klik pada area control lanjutkan dengan menekan tombol delete. Cobalah untuk menghapus control : text TODO, button OK dan Cancel.
control pada toolbox Untuk menambah control: (button) pilih icon drag drop ke editor dialog.
(static text) pilih icon control pada toolbox drag drop ke editor dialog.
(picture box) pilih icon control pada toolbox drag drop ke editor dialog.
Tambahkan control (dua button, 1 static text, 1 picture) pada dialog editor
3. Mengaktifkan control
Pilih control button1, double clik, pada dialog Add Member Function klik OK.
Atau klik kanan, pilih klik ClassWizard, pada MFC Class Wizard Dialog
Messages aktifkan BN_CLICKED, double clik, pada dialog Add Member Function klik OK.
4. Rubah terlebih dahulu ID dari static text = ID_label dan ID dari picture = ID_pic1, dengan cara aktifkan control dan klik kanan pilih properti.
5. Pada dialog MFC classwizard,Member Variabels edit type dan member dari control sebagai berikut
6. Menulis fungsi pada button1 clik Tambahkan program untuk menampilkan pesan pada static text seperti
dibawah ini
void CDialogDlg::OnButton1()
{
// TODO: Add your control notification handler code here
SetDlgItemText(IDC_label,"Belajar Prak Citra dgn VC++ dan MFC");
}
Jalankan program dengan memilih menu Build->Execute (!)
7. Tambahkan deklarasi kelas CBitmap pada File View – Header Files – dialogDlg.h
// Construction
public:
CDialogDlg(CWnd* pParent = NULL); // standard constructor
CBitmap m_bmpBitmap;
//
8. Menulis fungsi pada button2 clik
void CDialogDlg::OnButton2()
{
// TODO: Add your control notification handler code here
CDC* pDC = m_pic1.GetDC();//
CDC dcMem1;
CRect rect;//kotak di picture
BITMAP bm;//
HBITMAP
hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),
"pens.bmp",IMAGE_BITMAP, 0, 0,
LR_LOADFROMFILE|LR_CREATEDIBSECTION);
if(hBitmap)
{
if(m_bmpBitmap.DeleteObject())
m_bmpBitmap.Detach();
m_bmpBitmap.Attach(hBitmap);
}
m_pic1.GetClientRect(rect);//
m_bmpBitmap.GetBitmap(&bm);//
dcMem1.CreateCompatibleDC(pDC);
dcMem1.SelectObject(&m_bmpBitmap);
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem1,
0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);//
}
Jalankan program dengan memilih menu Build->Execute (!)



