Jumat, 19 Juni 2009
Tugas 4
void CMbohDlg::OnButton1()
{ int i,j,red,green,blue,gray; long int warna,warnagray;
CDC* pDC = m_pic1.GetDC(); CDC dcMem1; CRect rect; BITMAP bm;
HBITMAP hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),"a.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);
for(i=0;iStretchBlt(0,0,rect.Width(),rect.Height(),&dcMem1,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
}
void CMbohDlg::OnButton2()
{ int i,j,red,green,blue,th; long int warna,wgray,xgray; CDC* pDC = m_pic2.GetDC(); CDC dcMem1;
CRect rect; BITMAP bm;
HBITMAP hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),"a.bmp",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);
dcMem1.CreateCompatibleDC(pDC); dcMem1.SelectObject(&m_bmpBitmap);
th= int (256/16);
for(i=0;iStretchBlt(0,0,rect.Width(),rect.Height(),&dcMem1,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
}
//fungsi menggubah warna ke rgb
void WarnaToRGB(long int warna,int *Red, int *Green, int *Blue)
{ *Red = warna & 0x000000FF; *Green = (warna & 0x0000FF00) >> 8;
*Blue = (warna & 0x00FF0000) >> 16; }
//fungsi mengubah rgb ke warna
long int RGBToWarna(int Red, int Green, int Blue)
{ return(Red+(Green<<8)+(blue<<16));}
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



