Rabu, 27 Mei 2009

JAWABAN TUGAS 1

1. Tombol 1 digunakan untuk Load Gambar
void CPrak10_1Dlg::OnButton1()
{
// TODO: Add your control notification 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();
}
CDC* pDC = m_pic1.GetDC();// mengarah kontrol picture
dcMem; //mengarahkan obyek yg sdh dipilih pd bitmap
CRect rect;//kotak di picture
BITMAP bm;//mendefinisikan fungsi2 yg ada d bitmap
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);
}
m_pic1.GetClientRect(rect);//
m_bmpBitmap.GetBitmap(&bm);//
dcMem.CreateCompatibleDC(pDC);
//pDC->MoveTo(10,190);
//pDC->LineTo(300,190);
dcMem.SelectObject(&m_bmpBitmap);
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,
0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
}


2. Tombol 2 digunakan untuk Static Detection
void CPrak10_1Dlg::OnButton2()
{
// TODO: Add your control notification handler code here
int i,j;
int red,green,blue,gray;
long int warna, warna1;
CDC* pDC = m_pic2.GetDC();// mengarah kontrol picture
CDC dcMem; //mengarahkan obyek yg sdh dipilih pd bitmap
CRect rect;//kotak di picture
BITMAP bm;//mendefinisikan fungsi2 yg ada d bitmap
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);
}
m_pic2.GetClientRect(rect);//
m_bmpBitmap.GetBitmap(&bm);//
dcMem.CreateCompatibleDC(pDC);
dcMem.SelectObject(&m_bmpBitmap);
for(i=0;i for(j=0;j {
warna=dcMem.GetPixel(j,i);
WarnaToRGB(warna,&red,&green,&blue);
// 102-215, 20-158, 0-179 trafic merah
//102-160, 70-100, 0-65fitur warna kulit
if(((red>102)&&(red<160))&&((green>70)&&(green<100))&&((blue>0)&&(blue>65)))
warna1=warna;
else
warna1=RGBToWarna(0,0,0);
dcMem.SetPixel(j,i,warna1);
}
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,
0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
}


3. Tambahan Fungsi untuk merubah dari RGB ke data pixel
// 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));
}


4. Tombol 3 digunakan untuk Distance Detection
void CPrak10_1Dlg::OnButton3()
{
// TODO: Add your control notification handler code here
//int r=120, g=70, b=90; //untuk traffic merah
int r=144, g=89, b=65;
int k,j,red,green,blue,gray;
long int warna, warnagray;
double d;
CDC* pDC = m_pic3.GetDC();// mengarah kontrol picture
CDC dcMem; //mengarahkan obyek yg sdh dipilih pd bitmap
CRect rect;//kotak di picture
BITMAP bm;//mendefinisikan fungsi2 yg ada d bitmap
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);
}
m_pic3.GetClientRect(rect);//
m_bmpBitmap.GetBitmap(&bm);//

dcMem.CreateCompatibleDC(pDC);
dcMem.SelectObject(&m_bmpBitmap);

for(j=0;j for(k=0;k {
warna=dcMem.GetPixel(k,j);
WarnaToRGB(warna,&red,&green,&blue);
//d=fabs(red-147)+fabs(green-44)+fabs(blue-48);
d=fabs(red-r)+fabs(green-g)+fabs(blue-b);
if(d<85)
warna=RGBToWarna(red,green,blue);
else
warna=RGBToWarna(0,0,0);
dcMem.SetPixel(k,j,warna);
}
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,
0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
}

Senin, 25 Mei 2009

Analisa Laporan Praktikum 1

ANALISA PRAKTIKUM

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’.

JAWABAN TUGAS 2

1. Tombol pertama untuk Load Gambar
void CPrak11_1Dlg::OnButton1()
{
// TODO: Add your control notification 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();
}
CDC* pDC = m_pic1.GetDC();// mengarah kontrol picture
CDC dcMem; //mengarahkan obyek yg sdh dipilih pd bitmap
CRect rect;//kotak di picture
BITMAP bm;//mendefinisikan fungsi2 yg ada d bitmap
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);
}
m_pic1.GetClientRect(rect);//
m_bmpBitmap.GetBitmap(&bm);//
dcMem.CreateCompatibleDC(pDC);
//pDC->MoveTo(10,190);
//pDC->LineTo(300,190);
dcMem.SelectObject(&m_bmpBitmap);
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,
0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
}

2. Tombol 2 untuk menampilkan histogram untuk warna Red
void CPrak11_1Dlg::OnButton2()
{
// TODO: Add your control notification handler code here
int i,j,red,green,blue;
long int warna;
CDC* pDC = m_pic1.GetDC();// mengarah kontrol picture
CDC dcMem1; //mengarahkan obyek yg sdh dipilih pd bitmap
CRect rect;//kotak di picture
BITMAP bm;//mendefinisikan fungsi2 yg ada d bitmap
int hr[256];
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);
}
m_pic1.GetClientRect(rect);//
m_bmpBitmap.GetBitmap(&bm);//

dcMem1.CreateCompatibleDC(pDC);
dcMem1.SelectObject(&m_bmpBitmap);

for(i=0;i<256;i++)
hr[i]=0;
for(i=0;i for(j=0;j {
warna=dcMem1.GetPixel(j,i);
WarnaToRGB(warna,&red,&green,&blue);
hr[red]=hr[red]+1;
}
float hmax=hr[0];
for(i=1;i<256;i++)
{
if(hr[i]>hmax)
hmax=hr[i];
}
for(i=0;i<256;i++)
hr[i]=120*hr[i]/hmax;

CDC* pDC1=m_pic2.GetDC();
pDC1->MoveTo(0,100);
pDC1->LineTo(550,100); //sb x
pDC1->MoveTo(0,100-(int)hr[0]); //ttk h[0]
for(i=1;i<256;i++)
{
pDC1->MoveTo(i*2,100);
pDC1->LineTo(i*2,100-(int)hr[i]);
}
}

Kamis, 12 Maret 2009

Praktikum (1) Pengenalan MFC

Dalam praktikum Pengolahan Citra Digital yang pertama yang akan dipraktikumkan mengenai perkenalan MFC. Tujuan dari praktikum perkenalan MFC adalah

* Dapat membuat program pengolahan citra menggunakan Visual C++dengan MFC.
* Dapat membuat dialog menggunakan Visual C++ dengan MFC.

Microsoft Foundation Classes atau MFC adalah sebuah library bagian dari Windows API dalam kelas C++.Dalam praktikum perkenalan MFC menggunakan IDE (Integrated Development Environtment). Komponen yang ada pada IDE antara lain:

* Toolbox=> berisi Bermacam-macam control yang dapat digunakan di project Visual C++ (pada prak Citra yang biasa dipakai : picture,textbox, button,slider dsb).
* Dialog Editor (MFC) =>merupakan area tempat membuat atau mengedit tampilan dialog box bukan form window.
* Solution Explorer=> berfungsi menampilkan organisasi project yang dibuat
* Class View=> berfungsi menampilkan simbol code project seperti : namespaces, classes, methods, dan functions.
* Resource View=> berfungsi menampilkan resource file dari project.
* Properties Window=> merupakan window yang dapat dipakai untuk mengedit atau merubah sifat control pada waktu disain.

Bila kita mendengar pengolahan citra digital pasti dipikiran kita akan terpikir bagaimana kita dapat merekayasa dari sebuah gambar, akan tetapi bila menurut pengertian yang lebih ilmiah pengolahan citra digital adalah suatu proses merubah dari gambar asli menjadi gambar lain yang sesuai dengan keinginan kita.

Bila kita buat blok diagramnya maka pengolahan citra digital seperti gambar dibawah:

Cara menjalankan Visual C++ dengan MFC:

1. Pertama kali yang dilakukan adalah membuka aplikasiVisual C++ 6.0 dengan cara Pilih menu : Start->Programs->Microsoft Visual Studio 6.0->Microsoft Visual C++ 6.0
2. Setelah Visual C++ telah terbuka langkah selanjutnya adalah memberi nama program. dengan caraPilih menu : File->New->Projects->MFC AppWizard(exe) Isi Project name dan terakhir tekan tombol OK.
3. Kemudian kita akan memilih isi dari program yang akan kita buat. Dengan cara : • Step 1 :(aplikasi apa yang ingin dibuat) pilih dialog based untuk membuat aplikasi memakai dialog. Tekan tombol Next.
• Step 2 :
1.(fitur apa saja yang akan dimasukkan) pilih About box dan 3D controls untuk pilihan standar.
2.(mendukung aplikasi apa ?) pilih ActiveX controls untuk pilihan standar.
3. apakah kamu ingin memasukkan WOSA ? Window Sockets tidak dipilih untuk pilihan standard.
4.Kemudian masukkan judul pada dialaog, Title sudah berisi text sama dengan nama project untuk pilihan standard, Tekan tombol Next.
• Step 3 :
1. Bentuk Project yang diinginkan ?
Pilihan standard dan yang aktif hanya MFC Standard.
2. Apakah kamu ingin mengenerate source file coment ? pilihan standard Yes, Please
3. Apakah kamu ingin menggunakan MFC Library ? pilihan standard As a shared DLL,
• Step 4 : AppWizard creates the following classes for you
4. Cara menjalankan program• Pilih menu : Build->Execute (!) Tekan tombol Yes, untuk menutup aplikasi.

Cara mendisain 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 kontrol 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. • Untuk menambah control: (button) pilih icon button control pada toolbox drag drop ke editor dialog.
(static text) 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 • 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
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 (!)