Code: CPP
void CLEO_MedivisionView::OnToolsHistogram()
{
// TODO: Add your command handler code here
int x_tick, y_tick;
int j;
int a_loop, b_loop;
int k, t, f, i;
int x;
int q;
unsigned int intMFC;
unsigned int intMFC1;
unsigned int intMFC2;
unsigned short array1[256];
char c[10];
char p[10];
char l[10];
CString MFCString;
//unsigned short array1[65535];
pDC = GetDC(); //OnDraw member function
hdc = pDC->GetSafeHdc();
CPen aPen;
aPen.CreatePen(PS_SOLID, 2, RGB(255, 225, 225));
CPen* pOldPen = pDC->SelectObject(&aPen);
pDC->MoveTo(600,400); //drawing of x-axis
pDC->LineTo(920,400);
pDC->MoveTo(920,400);
pDC->LineTo(915,405);
pDC->MoveTo(920,400);
pDC->LineTo(915,395); //drawing of x-axis
x_tick = 600; //declaring constants
y_tick = 400;
for (j=1; j<=10; j++) //control the loop so that it draws ticks every 30 pixels
{
pDC->MoveTo(x_tick+(j*30),y_tick-5);
pDC->LineTo(x_tick+(j*30),y_tick+5);
}
pDC->MoveTo(600,400); //drawing of y-axis
pDC->LineTo(600,80);
pDC->MoveTo(600,80);
pDC->LineTo(605,85);
pDC->MoveTo(600,80);
pDC->LineTo(595,85); //drawing of y-axis
for (t=1; t<=10; t++) //control the loop so that it draws ticks every 30 pixels
{
pDC->MoveTo(x_tick-5,y_tick-(t*30));
pDC->LineTo(x_tick+5,y_tick-(t*30));
}
intensity= "Intensity"; //labelling of x-axis
SetBkColor(hdc, RGB(0, 0, 0));
SetTextColor(hdc, RGB(255, 255 ,255 ));
TextOut(hdc, 930, 390, LPCTSTR(intensity), 9);
pixels = "Pixels"; //labelling of y-axis
SetTextColor(hdc, RGB(255, 255 ,255 ));
TextOut(hdc, 580, 55, LPCTSTR(pixels), 6);
numeric = "0"; //number zero (universal)
SetTextColor(hdc, RGB(95, 158, 160));
TextOut(hdc, 585, 400, LPCTSTR(numeric),1);
intMFC = 0; //declaring constants
a_loop = 595;
for (k=1; k<=5; k++) //for every two ticks, draw legend of +52 each time it loops
{
intMFC = intMFC+52;
itoa(intMFC,c,10);
CString MFCString;
MFCString = c;
if (intMFC<100) //if number is XX then just show 2 digits
{
test = c;
SetTextColor(hdc, RGB(95, 158 ,160));
TextOut(hdc, a_loop+(k*60), 405, LPCTSTR(test), 2);
}
else if (intMFC>=100) //if number is XXX then show 3 digits
{
test = c;
SetTextColor(hdc, RGB(95, 158, 160));
TextOut(hdc, a_loop+(k*60), 405, LPCTSTR(test), 3);
}
}
intMFC1 = 0; //declaring of contants
intMFC2 = 0;
b_loop = 392;
if (no_of_rows == 256 && no_of_cols == 256) // opens if image its by 256*256
{
for (f=1; f<=5; f++) // for 5-ticks axis
{
intMFC1 = (((256 * 256)/5)+0.3) * f; // calculate each of the 5 marking is +13107
itoa(intMFC1,p,10);
CString MFCString;
MFCString = p;
test1 = p;
SetTextColor(hdc, RGB(95, 158 ,160));
TextOut(hdc, 540, b_loop-(f*60), LPCTSTR(test1), 5); // type casting
}
}
else if (no_of_rows == 512 && no_of_cols == 512) // if image is 512*512 run this
{
for (q=1; q<=5; q++) // for 5-ticks axis
{
intMFC2 = (((512 * 512)/5)+0.8) * q; // to calculate each marking is +52428
itoa(intMFC2,l,10);
MFCString = l;
if (intMFC2<100000) //'if' statement used because if digit is less
//than 100000, it shows crap at the last digit position
{
test2 = l;
SetTextColor(hdc, RGB(95, 158 ,160));
TextOut(hdc, 540, b_loop-(q*60), LPCTSTR(test2), 5);
}
else if (intMFC2>=100000) //if digit is more or equal to 100000, do this
{
test2 = l;
SetTextColor(hdc, RGB(95, 158, 160));
TextOut(hdc, 540, b_loop-(q*60), LPCTSTR(test2),6);
}
}
}
//count pixel intensity
//'for' loop couting from 0 to 255 which simply zeros out each element in array1 to prepare the array to do the count of the bytes in the image
for (i=0;i<255;i++)
{
array1[i]=0;
}
//'for' loop to loop through the bytes of the image
for (i=0; i<262143; i++)
{
array1[image[i]]++;
}
so this is the code so far and i have commented out the function of each code descriptions.. right now i have write up the code to get the pixel value of the image. so i need to draw lines on the histogram to represent it.. how do i go about doing it?
i will attach what its suppose to display until this codes in this thread. thanks for the help in adv!

