灰度柱状图的绘制
By EmilMatthew 06/2/28
上回书说到我完成了对BMP文件的解析.
参:
http://blog.csdn.net/emilmatthew/archive/2006/02/04/591814.aspx
今天,接着上次的程序,做一个小的应用,绘制黑白图像的灰度柱状图
程序总体设计思路:
1统计各灰度出现的频率.
2将频率值转规范到0-100的区间上
3根据规范化后的灰度频率矩阵,绘制直方图.
关键代码:
void BMParse::showHist(HDC inHDC,int x0,int y0)
{
int arrHists[256];
int i,j;
int maxHistVal;
for(i=0;i<256;i++)
arrHists[i]=0;
for(j=0;j<mBMFileInfo.bmHeight;j++)
for(i=0;i<mBMFileInfo.bmWidth;i++)
{
// if(bmpMatrix[j][i]>=0&&bmpMatrix[j][i]<256)
arrHists[bmpBWMatrix[j][i]]++;
}
/*find max hist val*/
maxHistVal=arrHists[0];
for(i=1;i<256;i++)
if(arrHists[i]>maxHistVal)
maxHistVal=arrHists[i];
for(i=0;i<256;i++)
arrHists[i]=(int)((float)arrHists[i]/(float)maxHistVal*100);
/*show part*/
/*x-axis*/
MoveToEx(inHDC,x0,y0,NULL);
LineTo(inHDC,x0+270,y0);
MoveToEx(inHDC,x0,y0,NULL);
for(i=0;i<256;i++)
{
MoveToEx(inHDC,x0+i,y0,NULL);
LineTo(inHDC,x0+i,y0-arrHists[i]);
}
}
效果:
代码下载:
http://emilmatthew.51.net/EmilPapers/06_11ThreadHist/code.rar