目前位置: VCer资源中心 >>> VCer论坛 >>> 技术问答

[本帖已阅读2530次 分值2 回复2次] 张贴资源 发回信箱 控制面板

大哥,这段程序怎么这是啊?

提供者:xiaofenzi 张贴时间:2005-01-27 16:41:50.0 出处:vcer.net 作者:不祥

大哥,这段程序怎么这是啊?(2005-01-27 16:41:50.0)


知道就说吗


 
级别: VCer小兵
头衔: VCer会员

经验: 12
作品: 1
分会: 西北分会
注册: 2005-01-27 16:11:14.0
登录: 2005-01-27 20:42:10.0

//////////////////////////////////直方图对话框构造函数;

ZFT::ZFT(CWnd* pParent /*=NULL*/)

: CDialog(ZFT::IDD, pParent)//ZFT为定义的用来显示直方图的对话框类;

{

 Width=Height=0;//对话框初始化阶段设置图像的宽和高为"0";

}

////////////////////////对话框重画函数;

void ZFT::OnPaint()

{

 CRect rect;//矩形区域对象;

 CWnd *pWnd;//得到图片框的窗口指针;

 pWnd=GetDlgItem(IDC_Graphic);//得到ZFT对话框内的"Frame"控件的指针;

 file://(IDC_Graphic为放置在对话框上的一个"Picture"控件,并讲类型设置为"Frame")。

 pWnd->GetClientRect(&rect);//得到"Frame"控件窗口的"视"区域;

 int i;

 CPaintDC dc(pWnd);//得到"Frame"控件的设备上下文;

 file://画直方图的x、y轴;

 dc.MoveTo(0,rect.Height());

 dc.LineTo(rect.Width(),rect.Height());

 dc.MoveTo(0,rect.Height());

 dc.LineTo(0,0);

 file://画直方图,num[]是"ZFT"的内部数组变量,存放的是图像各个灰度级出现的概率;该数组的各个分量在  显示具体图像的直方图时设置;

 for(i=0;i<256;i++)//根据图像上的各个灰度级出现的概率,在坐标上对应的画出一根直线,从而各个表示各灰度级出现概率的直线构成了图像的直方图;

 {

  dc.MoveTo(i+1,rect.Height());

  dc.LineTo (i+1,(rect.Height()-rect.Height()*num[i]*30));

  file://此处num分量乘以"30"是为了放大个灰度级上对应的出现概率直线,增强显示效果;

 }

}

////////////////////////////////////////////////////////

void ZFT::OnMouseMove(UINT nFlags, CPoint point)

{//OnMouseMove函数处理鼠标消息,显示当前鼠标所在直方图上的灰度值等信息;

 CWnd *pWnd,*pWndText;//定义两个窗口对象;

 CPoint point1;//定义个一个点对象;

 point1=point;//存放当前鼠标的位置信息;

 CRect rect;//矩形对象;

 CString string ;//字符串对象;

 pWnd=GetDlgItem(IDC_Graphic);//得到显示直方图的框架窗口对象指针;

 pWndText=GetDlgItem(IDC_NUM);//得到指向文本框对象(IDC_NUM)窗口的指针;

 pWnd->GetWindowRect(&rect);//获取pWnd窗口对象窗口区域位置;

 file://屏幕坐标转换为客户区坐标;

 ScreenToClient(&rect);

 file://判断当前鼠标是否指在直方图内;

 if(rect.PtInRect (point))

 {

  int x=point1.x-rect.left;

  file://当前鼠标位置减去区域的起始位置恰好为当前鼠标所指位置所表示的灰度级;

  string.Format("%d",x);

  file://显示当前位置对应的图像的灰度级;

  pWndText->SetWindowText((LPCTSTR)string);

 }

 CDialog::OnMouseMove(nFlags, point);

}

////////////////////////////////////////

void CDibView::OnImagehorgm()

file://在程序的"视"类对象内处理显示图像直方图的函数;

{

 CDibDoc *pDoc=GetDocument();

 HDIB hdib;

 hdib=pDoc->GetHDIB();

 BITMAPINFOHEADER *lpDIBHdr;//位图信息头结构指针;

 BYTE *lpDIBBits;//指向位图像素灰度值的指针;

 lpDIBHdr=( BITMAPINFOHEADER *)GlobalLock(hdib);//得到图像的位图头信息

 lpDIBBits=(BYTE*)lpDIBHdr+sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD);

 file://获取图像像素值

 ZFT dialog;//直方图对话框模板对象;

 int i,j;

 int wImgWidth=lpDIBHdr->biWidth;

 int wImgHeight=lpDIBHdr->biHeight;

 file://a/[]数组用来存放各个灰度级出现的概率;

 float a[256];

 for(i=0;i<256;i++)//初始化数组;

 {  

  a[i]=0;

 }

 file://统计各个灰度级出现的次数;

 for(i=0;i  {

  for(j=0;j   {

   a[*(lpDIBBits+WIDTHBYTES(wImgWidth*8)*i+j)]++;

  }

  file://统计各个灰度级出现的概率;

  for(i=0;i<256;i++)

  {

   a[i]=a[i]/(wImgHeight*wImgWidth);//得到每个灰度级的出现概率;

   memcpy(dialog.num,a,256*sizeof(float));

  }

 }

  dialog.DoModal();//显示直方图对话框;

 }

 return;

}

 

编译的时候总是出现

C:\Documents and Settings\Administrator\桌面\Brightness\BrightnessView.cpp(275) : error C2018: unknown character '0xa1'

这是怎么回事啊?

而且pWnd=GetDlgItem(IDC_Graphic);//得到显示直方图的框架窗口对象指针;

 pWndText=GetDlgItem(IDC_NUM);//得到指向文本框对象(IDC_NUM)窗口的指针;

 

大哥,IDC_Graphic和IDC_NUM这两个是不是ID呀?要是的话,从那里可以看到啊,分别从 哪个 资源 那里可以看到啊?

 

大哥你要是知道的话,给说详细点袄,我是采鸟啊!

注:转载文章需注明来源:VCer.net 文章地址:http://vcer.net/3656.html

  如果你觉得VCer.net不错,而且你愿意为VCer.net捐赠一元钱,那么点击后面的捐赠按钮吧:) vcer.net捐赠

[回复该贴] [加入个人书签]

re:大哥,这段程序怎么这是啊?

unknown character '0xa1'是汉字字元无法辨识的问题

两个IDC_??是控件ID,可以在ClassWizard里面看到,或者在DoDataExchange(){}中看它们的类型

xjtu_zhw 于 2005-02-03 11:47:14.0 编辑 [回复该贴]

re:大哥,这段程序怎么这是啊?

看看是不是输入法的问题.

如果你用汉语输入法输入了引号,逗号等就会这样.

我只知道这些,我也是菜鸟呵呵.但原对你有帮助.

 

IlOVEVC 于 2005-01-30 00:40:41.0 编辑 [回复该贴]