hi, im currently on a final year project and im doing hist. equalization for medical images. im progressing pretty alright.. so far, i have came up with codes to do this project.

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!
Attached Images
File Type: jpg clip_image002.jpg (29.7 KB, 4 views)

Last edited by SaswatPadhi; 28Sep2009 at 19:46.. Reason: Indentation