Analisa :
Listing program :
Button 1
void Cprak2Dlg::OnButton1()
{
// TODO: Add your control notification handler code here
CDC* pDC = m_picr.GetDC();
CDC dcMem;
CRect rect;
BITMAP bm;//
int i,j;
long int warna;
char str[5];
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_picr.GetClientRect(rect);
m_bmpBitmap.GetBitmap(&bm);
dcMem.CreateCompatibleDC(pDC);
dcMem.SelectObject(&m_bmpBitmap);
for(i=0;i
for(j=0;j
{
// memberi warna pada titik
dcMem.SetPixel(j,i,0x000000FF);
}
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,
0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
// membaca warna pada titik
warna=dcMem.GetPixel(5,5);
sprintf(str,"%ld",warna);
pDC->TextOut(10,10,str);
}
Button2
void Cprak2Dlg::OnButton2()
{
// TODO: Add your control notification handler code here
CDC* pDC = m_picg.GetDC();
CDC dcMem;
CRect rect;
BITMAP bm;//
int i,j;
long int warna;
char str[5];
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_picg.GetClientRect(rect);
m_bmpBitmap.GetBitmap(&bm);
dcMem.CreateCompatibleDC(pDC);
dcMem.SelectObject(&m_bmpBitmap);
for(i=0;i
for(j=0;j
{
// memberi warna pada titik
dcMem.SetPixel(j,i,0x0000FF00);
}
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,
0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
// membaca warna pada titik
warna=dcMem.GetPixel(5,5);
sprintf(str,"%ld",warna);
pDC->TextOut(10,10,str);
}
Button3
void Cprak2Dlg::OnButton3()
{
// TODO: Add your control notification handler code here
CDC* pDC = m_picb.GetDC();
CDC dcMem;
CRect rect;
BITMAP bm;//
int i,j;
long int warna;
char str[5];
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_picb.GetClientRect(rect);
m_bmpBitmap.GetBitmap(&bm);
dcMem.CreateCompatibleDC(pDC);
dcMem.SelectObject(&m_bmpBitmap);
for(i=0;i
for(j=0;j
{
// memberi warna pada titik
dcMem.SetPixel(j,i,0x00FF0000);
}
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,
0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
// membaca warna pada titik
warna=dcMem.GetPixel(5,5);
sprintf(str,"%ld",warna);
pDC->TextOut(10,10,str);
}
Pada dasarnya pengerjaan program ini sama dengan yang dicontohkan, perbedaannya adalah disini digunakan satu ruang tambahan (picture) untuk menampung hasil dari pencampuran ketiga warna. Besar dari ukuran masing-masing warna penyusun juga tidak fixed seperti pada program contoh, melainkan meminta input dari user ( 0 – 255 ). Input ini akan dibaca sebagai nilai integer. Disini juga hanya digunakan sebuah tombol (command) untuk mengisi keempat kolom (picture). Sehingga pada program button ini terdapat empat kali proses pengisian warna, yang pertama dikerjakan adalah mengisi warna hasil pencampuran, kemudian red, green, lalu blue. Tidak harus urut seperti ini, melainkan merupakan kreasi programmer masing-masing.
Kesimpulan :
1. Pencampuran ketiga warna dasar akan menghasilkan berbegai warna bergantung dari kadar dari masing-masing warna
2. Dalam numerisasi heksa untuk warna, dua digit paling belakang diwakili warna merah, kemudian dua digit selanjutnya diwakili warna hijau, dan biru untuk dua digit berikutnya.