void BMParse::equalizeOp(HDC inHdc,int offsetX,int offsetY) { //0.Inner value int arrHists[256]; float pArr[256]; int i,j; long totalHistVal; //0.Valuable declaration unsigned long outputPixel; int tmpTableVal; //1.cal each grey value's fequence for(i=0;i<256;i++) arrHists[i]=0; for(j=0;j<MBMFILEINFO.BMHEIGHT;J++) for(i=0;i<MBMFILEINFO.BMWIDTH;I++) { arrHists[bmpBWMatrix[j][i]]++; } //2.cal total hist value totalHistVal=0; for(i=0;i<256;i++) totalHistVal+=arrHists[i]; //3.cal pi pArr[0]=0; for(i=1;i<256;i++) pArr[i]=pArr[i-1]+(float)arrHists[i]/(float)totalHistVal; //4.show out adjusted picture: for(i=0;i<MBMFILEINFO.BMHEIGHT;I++) for(j=0;j<MBMFILEINFO.BMWIDTH;J++) { tmpTableVal=255*pArr[bmpBWMatrix[i][j]]; //make to windows color format outputPixel=((unsigned long)paletteArr[tmpTableVal].b)*65536+((unsigned long)paletteArr[tmpTableVal].g)*256+(unsigned long)paletteArr[tmpTableVal].r; //output pixel SetPixel(inHdc,j+offsetX,i+offsetY,outputPixel); } }